<!DOCTYPE html>
<html>
<head><meta charset="utf-8" />
<title>notMNIST</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

<style type="text/css">
    /*!
*
* Twitter Bootstrap
*
*/
/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
[hidden],
template {
  display: none;
}
a {
  background-color: transparent;
}
a:active,
a:hover {
  outline: 0;
}
abbr[title] {
  border-bottom: 1px dotted;
}
b,
strong {
  font-weight: bold;
}
dfn {
  font-style: italic;
}
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
mark {
  background: #ff0;
  color: #000;
}
small {
  font-size: 80%;
}
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  top: -0.5em;
}
sub {
  bottom: -0.25em;
}
img {
  border: 0;
}
svg:not(:root) {
  overflow: hidden;
}
figure {
  margin: 1em 40px;
}
hr {
  box-sizing: content-box;
  height: 0;
}
pre {
  overflow: auto;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}
button {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  cursor: pointer;
}
button[disabled],
html input[disabled] {
  cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
input {
  line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: textfield;
  box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
legend {
  border: 0;
  padding: 0;
}
textarea {
  overflow: auto;
}
optgroup {
  font-weight: bold;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,
th {
  padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    color: #000 !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}
@font-face {
  font-family: 'Glyphicons Halflings';
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
  position: relative;
  top: 1px;
  display: inline-block;
  font-family: 'Glyphicons Halflings';
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
  content: "\002a";
}
.glyphicon-plus:before {
  content: "\002b";
}
.glyphicon-euro:before,
.glyphicon-eur:before {
  content: "\20ac";
}
.glyphicon-minus:before {
  content: "\2212";
}
.glyphicon-cloud:before {
  content: "\2601";
}
.glyphicon-envelope:before {
  content: "\2709";
}
.glyphicon-pencil:before {
  content: "\270f";
}
.glyphicon-glass:before {
  content: "\e001";
}
.glyphicon-music:before {
  content: "\e002";
}
.glyphicon-search:before {
  content: "\e003";
}
.glyphicon-heart:before {
  content: "\e005";
}
.glyphicon-star:before {
  content: "\e006";
}
.glyphicon-star-empty:before {
  content: "\e007";
}
.glyphicon-user:before {
  content: "\e008";
}
.glyphicon-film:before {
  content: "\e009";
}
.glyphicon-th-large:before {
  content: "\e010";
}
.glyphicon-th:before {
  content: "\e011";
}
.glyphicon-th-list:before {
  content: "\e012";
}
.glyphicon-ok:before {
  content: "\e013";
}
.glyphicon-remove:before {
  content: "\e014";
}
.glyphicon-zoom-in:before {
  content: "\e015";
}
.glyphicon-zoom-out:before {
  content: "\e016";
}
.glyphicon-off:before {
  content: "\e017";
}
.glyphicon-signal:before {
  content: "\e018";
}
.glyphicon-cog:before {
  content: "\e019";
}
.glyphicon-trash:before {
  content: "\e020";
}
.glyphicon-home:before {
  content: "\e021";
}
.glyphicon-file:before {
  content: "\e022";
}
.glyphicon-time:before {
  content: "\e023";
}
.glyphicon-road:before {
  content: "\e024";
}
.glyphicon-download-alt:before {
  content: "\e025";
}
.glyphicon-download:before {
  content: "\e026";
}
.glyphicon-upload:before {
  content: "\e027";
}
.glyphicon-inbox:before {
  content: "\e028";
}
.glyphicon-play-circle:before {
  content: "\e029";
}
.glyphicon-repeat:before {
  content: "\e030";
}
.glyphicon-refresh:before {
  content: "\e031";
}
.glyphicon-list-alt:before {
  content: "\e032";
}
.glyphicon-lock:before {
  content: "\e033";
}
.glyphicon-flag:before {
  content: "\e034";
}
.glyphicon-headphones:before {
  content: "\e035";
}
.glyphicon-volume-off:before {
  content: "\e036";
}
.glyphicon-volume-down:before {
  content: "\e037";
}
.glyphicon-volume-up:before {
  content: "\e038";
}
.glyphicon-qrcode:before {
  content: "\e039";
}
.glyphicon-barcode:before {
  content: "\e040";
}
.glyphicon-tag:before {
  content: "\e041";
}
.glyphicon-tags:before {
  content: "\e042";
}
.glyphicon-book:before {
  content: "\e043";
}
.glyphicon-bookmark:before {
  content: "\e044";
}
.glyphicon-print:before {
  content: "\e045";
}
.glyphicon-camera:before {
  content: "\e046";
}
.glyphicon-font:before {
  content: "\e047";
}
.glyphicon-bold:before {
  content: "\e048";
}
.glyphicon-italic:before {
  content: "\e049";
}
.glyphicon-text-height:before {
  content: "\e050";
}
.glyphicon-text-width:before {
  content: "\e051";
}
.glyphicon-align-left:before {
  content: "\e052";
}
.glyphicon-align-center:before {
  content: "\e053";
}
.glyphicon-align-right:before {
  content: "\e054";
}
.glyphicon-align-justify:before {
  content: "\e055";
}
.glyphicon-list:before {
  content: "\e056";
}
.glyphicon-indent-left:before {
  content: "\e057";
}
.glyphicon-indent-right:before {
  content: "\e058";
}
.glyphicon-facetime-video:before {
  content: "\e059";
}
.glyphicon-picture:before {
  content: "\e060";
}
.glyphicon-map-marker:before {
  content: "\e062";
}
.glyphicon-adjust:before {
  content: "\e063";
}
.glyphicon-tint:before {
  content: "\e064";
}
.glyphicon-edit:before {
  content: "\e065";
}
.glyphicon-share:before {
  content: "\e066";
}
.glyphicon-check:before {
  content: "\e067";
}
.glyphicon-move:before {
  content: "\e068";
}
.glyphicon-step-backward:before {
  content: "\e069";
}
.glyphicon-fast-backward:before {
  content: "\e070";
}
.glyphicon-backward:before {
  content: "\e071";
}
.glyphicon-play:before {
  content: "\e072";
}
.glyphicon-pause:before {
  content: "\e073";
}
.glyphicon-stop:before {
  content: "\e074";
}
.glyphicon-forward:before {
  content: "\e075";
}
.glyphicon-fast-forward:before {
  content: "\e076";
}
.glyphicon-step-forward:before {
  content: "\e077";
}
.glyphicon-eject:before {
  content: "\e078";
}
.glyphicon-chevron-left:before {
  content: "\e079";
}
.glyphicon-chevron-right:before {
  content: "\e080";
}
.glyphicon-plus-sign:before {
  content: "\e081";
}
.glyphicon-minus-sign:before {
  content: "\e082";
}
.glyphicon-remove-sign:before {
  content: "\e083";
}
.glyphicon-ok-sign:before {
  content: "\e084";
}
.glyphicon-question-sign:before {
  content: "\e085";
}
.glyphicon-info-sign:before {
  content: "\e086";
}
.glyphicon-screenshot:before {
  content: "\e087";
}
.glyphicon-remove-circle:before {
  content: "\e088";
}
.glyphicon-ok-circle:before {
  content: "\e089";
}
.glyphicon-ban-circle:before {
  content: "\e090";
}
.glyphicon-arrow-left:before {
  content: "\e091";
}
.glyphicon-arrow-right:before {
  content: "\e092";
}
.glyphicon-arrow-up:before {
  content: "\e093";
}
.glyphicon-arrow-down:before {
  content: "\e094";
}
.glyphicon-share-alt:before {
  content: "\e095";
}
.glyphicon-resize-full:before {
  content: "\e096";
}
.glyphicon-resize-small:before {
  content: "\e097";
}
.glyphicon-exclamation-sign:before {
  content: "\e101";
}
.glyphicon-gift:before {
  content: "\e102";
}
.glyphicon-leaf:before {
  content: "\e103";
}
.glyphicon-fire:before {
  content: "\e104";
}
.glyphicon-eye-open:before {
  content: "\e105";
}
.glyphicon-eye-close:before {
  content: "\e106";
}
.glyphicon-warning-sign:before {
  content: "\e107";
}
.glyphicon-plane:before {
  content: "\e108";
}
.glyphicon-calendar:before {
  content: "\e109";
}
.glyphicon-random:before {
  content: "\e110";
}
.glyphicon-comment:before {
  content: "\e111";
}
.glyphicon-magnet:before {
  content: "\e112";
}
.glyphicon-chevron-up:before {
  content: "\e113";
}
.glyphicon-chevron-down:before {
  content: "\e114";
}
.glyphicon-retweet:before {
  content: "\e115";
}
.glyphicon-shopping-cart:before {
  content: "\e116";
}
.glyphicon-folder-close:before {
  content: "\e117";
}
.glyphicon-folder-open:before {
  content: "\e118";
}
.glyphicon-resize-vertical:before {
  content: "\e119";
}
.glyphicon-resize-horizontal:before {
  content: "\e120";
}
.glyphicon-hdd:before {
  content: "\e121";
}
.glyphicon-bullhorn:before {
  content: "\e122";
}
.glyphicon-bell:before {
  content: "\e123";
}
.glyphicon-certificate:before {
  content: "\e124";
}
.glyphicon-thumbs-up:before {
  content: "\e125";
}
.glyphicon-thumbs-down:before {
  content: "\e126";
}
.glyphicon-hand-right:before {
  content: "\e127";
}
.glyphicon-hand-left:before {
  content: "\e128";
}
.glyphicon-hand-up:before {
  content: "\e129";
}
.glyphicon-hand-down:before {
  content: "\e130";
}
.glyphicon-circle-arrow-right:before {
  content: "\e131";
}
.glyphicon-circle-arrow-left:before {
  content: "\e132";
}
.glyphicon-circle-arrow-up:before {
  content: "\e133";
}
.glyphicon-circle-arrow-down:before {
  content: "\e134";
}
.glyphicon-globe:before {
  content: "\e135";
}
.glyphicon-wrench:before {
  content: "\e136";
}
.glyphicon-tasks:before {
  content: "\e137";
}
.glyphicon-filter:before {
  content: "\e138";
}
.glyphicon-briefcase:before {
  content: "\e139";
}
.glyphicon-fullscreen:before {
  content: "\e140";
}
.glyphicon-dashboard:before {
  content: "\e141";
}
.glyphicon-paperclip:before {
  content: "\e142";
}
.glyphicon-heart-empty:before {
  content: "\e143";
}
.glyphicon-link:before {
  content: "\e144";
}
.glyphicon-phone:before {
  content: "\e145";
}
.glyphicon-pushpin:before {
  content: "\e146";
}
.glyphicon-usd:before {
  content: "\e148";
}
.glyphicon-gbp:before {
  content: "\e149";
}
.glyphicon-sort:before {
  content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
  content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
  content: "\e152";
}
.glyphicon-sort-by-order:before {
  content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
  content: "\e154";
}
.glyphicon-sort-by-attributes:before {
  content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
  content: "\e156";
}
.glyphicon-unchecked:before {
  content: "\e157";
}
.glyphicon-expand:before {
  content: "\e158";
}
.glyphicon-collapse-down:before {
  content: "\e159";
}
.glyphicon-collapse-up:before {
  content: "\e160";
}
.glyphicon-log-in:before {
  content: "\e161";
}
.glyphicon-flash:before {
  content: "\e162";
}
.glyphicon-log-out:before {
  content: "\e163";
}
.glyphicon-new-window:before {
  content: "\e164";
}
.glyphicon-record:before {
  content: "\e165";
}
.glyphicon-save:before {
  content: "\e166";
}
.glyphicon-open:before {
  content: "\e167";
}
.glyphicon-saved:before {
  content: "\e168";
}
.glyphicon-import:before {
  content: "\e169";
}
.glyphicon-export:before {
  content: "\e170";
}
.glyphicon-send:before {
  content: "\e171";
}
.glyphicon-floppy-disk:before {
  content: "\e172";
}
.glyphicon-floppy-saved:before {
  content: "\e173";
}
.glyphicon-floppy-remove:before {
  content: "\e174";
}
.glyphicon-floppy-save:before {
  content: "\e175";
}
.glyphicon-floppy-open:before {
  content: "\e176";
}
.glyphicon-credit-card:before {
  content: "\e177";
}
.glyphicon-transfer:before {
  content: "\e178";
}
.glyphicon-cutlery:before {
  content: "\e179";
}
.glyphicon-header:before {
  content: "\e180";
}
.glyphicon-compressed:before {
  content: "\e181";
}
.glyphicon-earphone:before {
  content: "\e182";
}
.glyphicon-phone-alt:before {
  content: "\e183";
}
.glyphicon-tower:before {
  content: "\e184";
}
.glyphicon-stats:before {
  content: "\e185";
}
.glyphicon-sd-video:before {
  content: "\e186";
}
.glyphicon-hd-video:before {
  content: "\e187";
}
.glyphicon-subtitles:before {
  content: "\e188";
}
.glyphicon-sound-stereo:before {
  content: "\e189";
}
.glyphicon-sound-dolby:before {
  content: "\e190";
}
.glyphicon-sound-5-1:before {
  content: "\e191";
}
.glyphicon-sound-6-1:before {
  content: "\e192";
}
.glyphicon-sound-7-1:before {
  content: "\e193";
}
.glyphicon-copyright-mark:before {
  content: "\e194";
}
.glyphicon-registration-mark:before {
  content: "\e195";
}
.glyphicon-cloud-download:before {
  content: "\e197";
}
.glyphicon-cloud-upload:before {
  content: "\e198";
}
.glyphicon-tree-conifer:before {
  content: "\e199";
}
.glyphicon-tree-deciduous:before {
  content: "\e200";
}
.glyphicon-cd:before {
  content: "\e201";
}
.glyphicon-save-file:before {
  content: "\e202";
}
.glyphicon-open-file:before {
  content: "\e203";
}
.glyphicon-level-up:before {
  content: "\e204";
}
.glyphicon-copy:before {
  content: "\e205";
}
.glyphicon-paste:before {
  content: "\e206";
}
.glyphicon-alert:before {
  content: "\e209";
}
.glyphicon-equalizer:before {
  content: "\e210";
}
.glyphicon-king:before {
  content: "\e211";
}
.glyphicon-queen:before {
  content: "\e212";
}
.glyphicon-pawn:before {
  content: "\e213";
}
.glyphicon-bishop:before {
  content: "\e214";
}
.glyphicon-knight:before {
  content: "\e215";
}
.glyphicon-baby-formula:before {
  content: "\e216";
}
.glyphicon-tent:before {
  content: "\26fa";
}
.glyphicon-blackboard:before {
  content: "\e218";
}
.glyphicon-bed:before {
  content: "\e219";
}
.glyphicon-apple:before {
  content: "\f8ff";
}
.glyphicon-erase:before {
  content: "\e221";
}
.glyphicon-hourglass:before {
  content: "\231b";
}
.glyphicon-lamp:before {
  content: "\e223";
}
.glyphicon-duplicate:before {
  content: "\e224";
}
.glyphicon-piggy-bank:before {
  content: "\e225";
}
.glyphicon-scissors:before {
  content: "\e226";
}
.glyphicon-bitcoin:before {
  content: "\e227";
}
.glyphicon-btc:before {
  content: "\e227";
}
.glyphicon-xbt:before {
  content: "\e227";
}
.glyphicon-yen:before {
  content: "\00a5";
}
.glyphicon-jpy:before {
  content: "\00a5";
}
.glyphicon-ruble:before {
  content: "\20bd";
}
.glyphicon-rub:before {
  content: "\20bd";
}
.glyphicon-scale:before {
  content: "\e230";
}
.glyphicon-ice-lolly:before {
  content: "\e231";
}
.glyphicon-ice-lolly-tasted:before {
  content: "\e232";
}
.glyphicon-education:before {
  content: "\e233";
}
.glyphicon-option-horizontal:before {
  content: "\e234";
}
.glyphicon-option-vertical:before {
  content: "\e235";
}
.glyphicon-menu-hamburger:before {
  content: "\e236";
}
.glyphicon-modal-window:before {
  content: "\e237";
}
.glyphicon-oil:before {
  content: "\e238";
}
.glyphicon-grain:before {
  content: "\e239";
}
.glyphicon-sunglasses:before {
  content: "\e240";
}
.glyphicon-text-size:before {
  content: "\e241";
}
.glyphicon-text-color:before {
  content: "\e242";
}
.glyphicon-text-background:before {
  content: "\e243";
}
.glyphicon-object-align-top:before {
  content: "\e244";
}
.glyphicon-object-align-bottom:before {
  content: "\e245";
}
.glyphicon-object-align-horizontal:before {
  content: "\e246";
}
.glyphicon-object-align-left:before {
  content: "\e247";
}
.glyphicon-object-align-vertical:before {
  content: "\e248";
}
.glyphicon-object-align-right:before {
  content: "\e249";
}
.glyphicon-triangle-right:before {
  content: "\e250";
}
.glyphicon-triangle-left:before {
  content: "\e251";
}
.glyphicon-triangle-bottom:before {
  content: "\e252";
}
.glyphicon-triangle-top:before {
  content: "\e253";
}
.glyphicon-console:before {
  content: "\e254";
}
.glyphicon-superscript:before {
  content: "\e255";
}
.glyphicon-subscript:before {
  content: "\e256";
}
.glyphicon-menu-left:before {
  content: "\e257";
}
.glyphicon-menu-right:before {
  content: "\e258";
}
.glyphicon-menu-down:before {
  content: "\e259";
}
.glyphicon-menu-up:before {
  content: "\e260";
}
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
html {
  font-size: 10px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 13px;
  line-height: 1.42857143;
  color: #000;
  background-color: #fff;
}
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
a {
  color: #337ab7;
  text-decoration: none;
}
a:hover,
a:focus {
  color: #23527c;
  text-decoration: underline;
}
a:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
figure {
  margin: 0;
}
img {
  vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  display: block;
  max-width: 100%;
  height: auto;
}
.img-rounded {
  border-radius: 3px;
}
.img-thumbnail {
  padding: 4px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: all 0.2s ease-in-out;
  -o-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: inline-block;
  max-width: 100%;
  height: auto;
}
.img-circle {
  border-radius: 50%;
}
hr {
  margin-top: 18px;
  margin-bottom: 18px;
  border: 0;
  border-top: 1px solid #eeeeee;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
[role="button"] {
  cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  font-family: inherit;
  font-weight: 500;
  line-height: 1.1;
  color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
  font-weight: normal;
  line-height: 1;
  color: #777777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
  margin-top: 18px;
  margin-bottom: 9px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
  font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  margin-top: 9px;
  margin-bottom: 9px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
  font-size: 75%;
}
h1,
.h1 {
  font-size: 33px;
}
h2,
.h2 {
  font-size: 27px;
}
h3,
.h3 {
  font-size: 23px;
}
h4,
.h4 {
  font-size: 17px;
}
h5,
.h5 {
  font-size: 13px;
}
h6,
.h6 {
  font-size: 12px;
}
p {
  margin: 0 0 9px;
}
.lead {
  margin-bottom: 18px;
  font-size: 14px;
  font-weight: 300;
  line-height: 1.4;
}
@media (min-width: 768px) {
  .lead {
    font-size: 19.5px;
  }
}
small,
.small {
  font-size: 92%;
}
mark,
.mark {
  background-color: #fcf8e3;
  padding: .2em;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-justify {
  text-align: justify;
}
.text-nowrap {
  white-space: nowrap;
}
.text-lowercase {
  text-transform: lowercase;
}
.text-uppercase {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-muted {
  color: #777777;
}
.text-primary {
  color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
  color: #286090;
}
.text-success {
  color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
  color: #2b542c;
}
.text-info {
  color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
  color: #245269;
}
.text-warning {
  color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
  color: #66512c;
}
.text-danger {
  color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
  color: #843534;
}
.bg-primary {
  color: #fff;
  background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
  background-color: #286090;
}
.bg-success {
  background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
  background-color: #c1e2b3;
}
.bg-info {
  background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
  background-color: #afd9ee;
}
.bg-warning {
  background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
  background-color: #f7ecb5;
}
.bg-danger {
  background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
  background-color: #e4b9b9;
}
.page-header {
  padding-bottom: 8px;
  margin: 36px 0 18px;
  border-bottom: 1px solid #eeeeee;
}
ul,
ol {
  margin-top: 0;
  margin-bottom: 9px;
}
ul ul,
ol ul,
ul ol,
ol ol {
  margin-bottom: 0;
}
.list-unstyled {
  padding-left: 0;
  list-style: none;
}
.list-inline {
  padding-left: 0;
  list-style: none;
  margin-left: -5px;
}
.list-inline > li {
  display: inline-block;
  padding-left: 5px;
  padding-right: 5px;
}
dl {
  margin-top: 0;
  margin-bottom: 18px;
}
dt,
dd {
  line-height: 1.42857143;
}
dt {
  font-weight: bold;
}
dd {
  margin-left: 0;
}
@media (min-width: 541px) {
  .dl-horizontal dt {
    float: left;
    width: 160px;
    clear: left;
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .dl-horizontal dd {
    margin-left: 180px;
  }
}
abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #777777;
}
.initialism {
  font-size: 90%;
  text-transform: uppercase;
}
blockquote {
  padding: 9px 18px;
  margin: 0 0 18px;
  font-size: inherit;
  border-left: 5px solid #eeeeee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
  margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
  display: block;
  font-size: 80%;
  line-height: 1.42857143;
  color: #777777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
  content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #eeeeee;
  border-left: 0;
  text-align: right;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
  content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
  content: '\00A0 \2014';
}
address {
  margin-bottom: 18px;
  font-style: normal;
  line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
  font-family: monospace;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  background-color: #f9f2f4;
  border-radius: 2px;
}
kbd {
  padding: 2px 4px;
  font-size: 90%;
  color: #888;
  background-color: transparent;
  border-radius: 1px;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
  padding: 0;
  font-size: 100%;
  font-weight: bold;
  box-shadow: none;
}
pre {
  display: block;
  padding: 8.5px;
  margin: 0 0 9px;
  font-size: 12px;
  line-height: 1.42857143;
  word-break: break-all;
  word-wrap: break-word;
  color: #333333;
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border-radius: 2px;
}
pre code {
  padding: 0;
  font-size: inherit;
  color: inherit;
  white-space: pre-wrap;
  background-color: transparent;
  border-radius: 0;
}
.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}
.container {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
@media (min-width: 768px) {
  .container {
    width: 768px;
  }
}
@media (min-width: 992px) {
  .container {
    width: 940px;
  }
}
@media (min-width: 1200px) {
  .container {
    width: 1140px;
  }
}
.container-fluid {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
.row {
  margin-left: 0px;
  margin-right: 0px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-left: 0px;
  padding-right: 0px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
  float: left;
}
.col-xs-12 {
  width: 100%;
}
.col-xs-11 {
  width: 91.66666667%;
}
.col-xs-10 {
  width: 83.33333333%;
}
.col-xs-9 {
  width: 75%;
}
.col-xs-8 {
  width: 66.66666667%;
}
.col-xs-7 {
  width: 58.33333333%;
}
.col-xs-6 {
  width: 50%;
}
.col-xs-5 {
  width: 41.66666667%;
}
.col-xs-4 {
  width: 33.33333333%;
}
.col-xs-3 {
  width: 25%;
}
.col-xs-2 {
  width: 16.66666667%;
}
.col-xs-1 {
  width: 8.33333333%;
}
.col-xs-pull-12 {
  right: 100%;
}
.col-xs-pull-11 {
  right: 91.66666667%;
}
.col-xs-pull-10 {
  right: 83.33333333%;
}
.col-xs-pull-9 {
  right: 75%;
}
.col-xs-pull-8 {
  right: 66.66666667%;
}
.col-xs-pull-7 {
  right: 58.33333333%;
}
.col-xs-pull-6 {
  right: 50%;
}
.col-xs-pull-5 {
  right: 41.66666667%;
}
.col-xs-pull-4 {
  right: 33.33333333%;
}
.col-xs-pull-3 {
  right: 25%;
}
.col-xs-pull-2 {
  right: 16.66666667%;
}
.col-xs-pull-1 {
  right: 8.33333333%;
}
.col-xs-pull-0 {
  right: auto;
}
.col-xs-push-12 {
  left: 100%;
}
.col-xs-push-11 {
  left: 91.66666667%;
}
.col-xs-push-10 {
  left: 83.33333333%;
}
.col-xs-push-9 {
  left: 75%;
}
.col-xs-push-8 {
  left: 66.66666667%;
}
.col-xs-push-7 {
  left: 58.33333333%;
}
.col-xs-push-6 {
  left: 50%;
}
.col-xs-push-5 {
  left: 41.66666667%;
}
.col-xs-push-4 {
  left: 33.33333333%;
}
.col-xs-push-3 {
  left: 25%;
}
.col-xs-push-2 {
  left: 16.66666667%;
}
.col-xs-push-1 {
  left: 8.33333333%;
}
.col-xs-push-0 {
  left: auto;
}
.col-xs-offset-12 {
  margin-left: 100%;
}
.col-xs-offset-11 {
  margin-left: 91.66666667%;
}
.col-xs-offset-10 {
  margin-left: 83.33333333%;
}
.col-xs-offset-9 {
  margin-left: 75%;
}
.col-xs-offset-8 {
  margin-left: 66.66666667%;
}
.col-xs-offset-7 {
  margin-left: 58.33333333%;
}
.col-xs-offset-6 {
  margin-left: 50%;
}
.col-xs-offset-5 {
  margin-left: 41.66666667%;
}
.col-xs-offset-4 {
  margin-left: 33.33333333%;
}
.col-xs-offset-3 {
  margin-left: 25%;
}
.col-xs-offset-2 {
  margin-left: 16.66666667%;
}
.col-xs-offset-1 {
  margin-left: 8.33333333%;
}
.col-xs-offset-0 {
  margin-left: 0%;
}
@media (min-width: 768px) {
  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
    float: left;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-11 {
    width: 91.66666667%;
  }
  .col-sm-10 {
    width: 83.33333333%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-8 {
    width: 66.66666667%;
  }
  .col-sm-7 {
    width: 58.33333333%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-5 {
    width: 41.66666667%;
  }
  .col-sm-4 {
    width: 33.33333333%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-2 {
    width: 16.66666667%;
  }
  .col-sm-1 {
    width: 8.33333333%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-pull-11 {
    right: 91.66666667%;
  }
  .col-sm-pull-10 {
    right: 83.33333333%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-8 {
    right: 66.66666667%;
  }
  .col-sm-pull-7 {
    right: 58.33333333%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-5 {
    right: 41.66666667%;
  }
  .col-sm-pull-4 {
    right: 33.33333333%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-2 {
    right: 16.66666667%;
  }
  .col-sm-pull-1 {
    right: 8.33333333%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-push-11 {
    left: 91.66666667%;
  }
  .col-sm-push-10 {
    left: 83.33333333%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-8 {
    left: 66.66666667%;
  }
  .col-sm-push-7 {
    left: 58.33333333%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-5 {
    left: 41.66666667%;
  }
  .col-sm-push-4 {
    left: 33.33333333%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-2 {
    left: 16.66666667%;
  }
  .col-sm-push-1 {
    left: 8.33333333%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-sm-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 992px) {
  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
    float: left;
  }
  .col-md-12 {
    width: 100%;
  }
  .col-md-11 {
    width: 91.66666667%;
  }
  .col-md-10 {
    width: 83.33333333%;
  }
  .col-md-9 {
    width: 75%;
  }
  .col-md-8 {
    width: 66.66666667%;
  }
  .col-md-7 {
    width: 58.33333333%;
  }
  .col-md-6 {
    width: 50%;
  }
  .col-md-5 {
    width: 41.66666667%;
  }
  .col-md-4 {
    width: 33.33333333%;
  }
  .col-md-3 {
    width: 25%;
  }
  .col-md-2 {
    width: 16.66666667%;
  }
  .col-md-1 {
    width: 8.33333333%;
  }
  .col-md-pull-12 {
    right: 100%;
  }
  .col-md-pull-11 {
    right: 91.66666667%;
  }
  .col-md-pull-10 {
    right: 83.33333333%;
  }
  .col-md-pull-9 {
    right: 75%;
  }
  .col-md-pull-8 {
    right: 66.66666667%;
  }
  .col-md-pull-7 {
    right: 58.33333333%;
  }
  .col-md-pull-6 {
    right: 50%;
  }
  .col-md-pull-5 {
    right: 41.66666667%;
  }
  .col-md-pull-4 {
    right: 33.33333333%;
  }
  .col-md-pull-3 {
    right: 25%;
  }
  .col-md-pull-2 {
    right: 16.66666667%;
  }
  .col-md-pull-1 {
    right: 8.33333333%;
  }
  .col-md-pull-0 {
    right: auto;
  }
  .col-md-push-12 {
    left: 100%;
  }
  .col-md-push-11 {
    left: 91.66666667%;
  }
  .col-md-push-10 {
    left: 83.33333333%;
  }
  .col-md-push-9 {
    left: 75%;
  }
  .col-md-push-8 {
    left: 66.66666667%;
  }
  .col-md-push-7 {
    left: 58.33333333%;
  }
  .col-md-push-6 {
    left: 50%;
  }
  .col-md-push-5 {
    left: 41.66666667%;
  }
  .col-md-push-4 {
    left: 33.33333333%;
  }
  .col-md-push-3 {
    left: 25%;
  }
  .col-md-push-2 {
    left: 16.66666667%;
  }
  .col-md-push-1 {
    left: 8.33333333%;
  }
  .col-md-push-0 {
    left: auto;
  }
  .col-md-offset-12 {
    margin-left: 100%;
  }
  .col-md-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-md-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-md-offset-9 {
    margin-left: 75%;
  }
  .col-md-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-md-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-md-offset-6 {
    margin-left: 50%;
  }
  .col-md-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-md-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-md-offset-3 {
    margin-left: 25%;
  }
  .col-md-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-md-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-md-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 1200px) {
  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
    float: left;
  }
  .col-lg-12 {
    width: 100%;
  }
  .col-lg-11 {
    width: 91.66666667%;
  }
  .col-lg-10 {
    width: 83.33333333%;
  }
  .col-lg-9 {
    width: 75%;
  }
  .col-lg-8 {
    width: 66.66666667%;
  }
  .col-lg-7 {
    width: 58.33333333%;
  }
  .col-lg-6 {
    width: 50%;
  }
  .col-lg-5 {
    width: 41.66666667%;
  }
  .col-lg-4 {
    width: 33.33333333%;
  }
  .col-lg-3 {
    width: 25%;
  }
  .col-lg-2 {
    width: 16.66666667%;
  }
  .col-lg-1 {
    width: 8.33333333%;
  }
  .col-lg-pull-12 {
    right: 100%;
  }
  .col-lg-pull-11 {
    right: 91.66666667%;
  }
  .col-lg-pull-10 {
    right: 83.33333333%;
  }
  .col-lg-pull-9 {
    right: 75%;
  }
  .col-lg-pull-8 {
    right: 66.66666667%;
  }
  .col-lg-pull-7 {
    right: 58.33333333%;
  }
  .col-lg-pull-6 {
    right: 50%;
  }
  .col-lg-pull-5 {
    right: 41.66666667%;
  }
  .col-lg-pull-4 {
    right: 33.33333333%;
  }
  .col-lg-pull-3 {
    right: 25%;
  }
  .col-lg-pull-2 {
    right: 16.66666667%;
  }
  .col-lg-pull-1 {
    right: 8.33333333%;
  }
  .col-lg-pull-0 {
    right: auto;
  }
  .col-lg-push-12 {
    left: 100%;
  }
  .col-lg-push-11 {
    left: 91.66666667%;
  }
  .col-lg-push-10 {
    left: 83.33333333%;
  }
  .col-lg-push-9 {
    left: 75%;
  }
  .col-lg-push-8 {
    left: 66.66666667%;
  }
  .col-lg-push-7 {
    left: 58.33333333%;
  }
  .col-lg-push-6 {
    left: 50%;
  }
  .col-lg-push-5 {
    left: 41.66666667%;
  }
  .col-lg-push-4 {
    left: 33.33333333%;
  }
  .col-lg-push-3 {
    left: 25%;
  }
  .col-lg-push-2 {
    left: 16.66666667%;
  }
  .col-lg-push-1 {
    left: 8.33333333%;
  }
  .col-lg-push-0 {
    left: auto;
  }
  .col-lg-offset-12 {
    margin-left: 100%;
  }
  .col-lg-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-lg-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-lg-offset-9 {
    margin-left: 75%;
  }
  .col-lg-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-lg-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-lg-offset-6 {
    margin-left: 50%;
  }
  .col-lg-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-lg-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-lg-offset-3 {
    margin-left: 25%;
  }
  .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-lg-offset-0 {
    margin-left: 0%;
  }
}
table {
  background-color: transparent;
}
caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #777777;
  text-align: left;
}
th {
  text-align: left;
}
.table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 18px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ddd;
}
.table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
  border-top: 0;
}
.table > tbody + tbody {
  border-top: 2px solid #ddd;
}
.table .table {
  background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
  padding: 5px;
}
.table-bordered {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
  border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
  background-color: #f5f5f5;
}
table col[class*="col-"] {
  position: static;
  float: none;
  display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
  position: static;
  float: none;
  display: table-cell;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
  background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
  background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
  background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
  background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
  background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
  background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
  background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
  background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
  background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
  background-color: #ebcccc;
}
.table-responsive {
  overflow-x: auto;
  min-height: 0.01%;
}
@media screen and (max-width: 767px) {
  .table-responsive {
    width: 100%;
    margin-bottom: 13.5px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ddd;
  }
  .table-responsive > .table {
    margin-bottom: 0;
  }
  .table-responsive > .table > thead > tr > th,
  .table-responsive > .table > tbody > tr > th,
  .table-responsive > .table > tfoot > tr > th,
  .table-responsive > .table > thead > tr > td,
  .table-responsive > .table > tbody > tr > td,
  .table-responsive > .table > tfoot > tr > td {
    white-space: nowrap;
  }
  .table-responsive > .table-bordered {
    border: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:first-child,
  .table-responsive > .table-bordered > tbody > tr > th:first-child,
  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  .table-responsive > .table-bordered > thead > tr > td:first-child,
  .table-responsive > .table-bordered > tbody > tr > td:first-child,
  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
    border-left: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:last-child,
  .table-responsive > .table-bordered > tbody > tr > th:last-child,
  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  .table-responsive > .table-bordered > thead > tr > td:last-child,
  .table-responsive > .table-bordered > tbody > tr > td:last-child,
  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
    border-right: 0;
  }
  .table-responsive > .table-bordered > tbody > tr:last-child > th,
  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
  .table-responsive > .table-bordered > tbody > tr:last-child > td,
  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
    border-bottom: 0;
  }
}
fieldset {
  padding: 0;
  margin: 0;
  border: 0;
  min-width: 0;
}
legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 18px;
  font-size: 19.5px;
  line-height: inherit;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}
label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
input[type="search"] {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
input[type="file"] {
  display: block;
}
input[type="range"] {
  display: block;
  width: 100%;
}
select[multiple],
select[size] {
  height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
output {
  display: block;
  padding-top: 7px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
}
.form-control {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.form-control:-ms-input-placeholder {
  color: #999;
}
.form-control::-webkit-input-placeholder {
  color: #999;
}
.form-control::-ms-expand {
  border: 0;
  background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
  background-color: #eeeeee;
  opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
  cursor: not-allowed;
}
textarea.form-control {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  input[type="date"].form-control,
  input[type="time"].form-control,
  input[type="datetime-local"].form-control,
  input[type="month"].form-control {
    line-height: 32px;
  }
  input[type="date"].input-sm,
  input[type="time"].input-sm,
  input[type="datetime-local"].input-sm,
  input[type="month"].input-sm,
  .input-group-sm input[type="date"],
  .input-group-sm input[type="time"],
  .input-group-sm input[type="datetime-local"],
  .input-group-sm input[type="month"] {
    line-height: 30px;
  }
  input[type="date"].input-lg,
  input[type="time"].input-lg,
  input[type="datetime-local"].input-lg,
  input[type="month"].input-lg,
  .input-group-lg input[type="date"],
  .input-group-lg input[type="time"],
  .input-group-lg input[type="datetime-local"],
  .input-group-lg input[type="month"] {
    line-height: 45px;
  }
}
.form-group {
  margin-bottom: 15px;
}
.radio,
.checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
.radio label,
.checkbox label {
  min-height: 18px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-left: -20px;
  margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
  margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  vertical-align: middle;
  font-weight: normal;
  cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"].disabled,
input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"] {
  cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
  cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
  cursor: not-allowed;
}
.form-control-static {
  padding-top: 7px;
  padding-bottom: 7px;
  margin-bottom: 0;
  min-height: 31px;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
  padding-left: 0;
  padding-right: 0;
}
.input-sm {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-sm {
  height: 30px;
  line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
  height: auto;
}
.form-group-sm .form-control {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.form-group-sm select.form-control {
  height: 30px;
  line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
  height: auto;
}
.form-group-sm .form-control-static {
  height: 30px;
  min-height: 30px;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.input-lg {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-lg {
  height: 45px;
  line-height: 45px;
}
textarea.input-lg,
select[multiple].input-lg {
  height: auto;
}
.form-group-lg .form-control {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.form-group-lg select.form-control {
  height: 45px;
  line-height: 45px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
  height: auto;
}
.form-group-lg .form-control-static {
  height: 45px;
  min-height: 35px;
  padding: 11px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.has-feedback {
  position: relative;
}
.has-feedback .form-control {
  padding-right: 40px;
}
.form-control-feedback {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: block;
  width: 32px;
  height: 32px;
  line-height: 32px;
  text-align: center;
  pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
  width: 45px;
  height: 45px;
  line-height: 45px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
  width: 30px;
  height: 30px;
  line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
  color: #3c763d;
}
.has-success .form-control {
  border-color: #3c763d;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
  border-color: #2b542c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
  color: #3c763d;
  border-color: #3c763d;
  background-color: #dff0d8;
}
.has-success .form-control-feedback {
  color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
  color: #8a6d3b;
}
.has-warning .form-control {
  border-color: #8a6d3b;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
  border-color: #66512c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
  color: #8a6d3b;
  border-color: #8a6d3b;
  background-color: #fcf8e3;
}
.has-warning .form-control-feedback {
  color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
  color: #a94442;
}
.has-error .form-control {
  border-color: #a94442;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
  border-color: #843534;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
  color: #a94442;
  border-color: #a94442;
  background-color: #f2dede;
}
.has-error .form-control-feedback {
  color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
  top: 23px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
.help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #404040;
}
@media (min-width: 768px) {
  .form-inline .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .form-inline .form-control-static {
    display: inline-block;
  }
  .form-inline .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .form-inline .input-group .input-group-addon,
  .form-inline .input-group .input-group-btn,
  .form-inline .input-group .form-control {
    width: auto;
  }
  .form-inline .input-group > .form-control {
    width: 100%;
  }
  .form-inline .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio,
  .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio label,
  .form-inline .checkbox label {
    padding-left: 0;
  }
  .form-inline .radio input[type="radio"],
  .form-inline .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
  min-height: 25px;
}
.form-horizontal .form-group {
  margin-left: 0px;
  margin-right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .control-label {
    text-align: right;
    margin-bottom: 0;
    padding-top: 7px;
  }
}
.form-horizontal .has-feedback .form-control-feedback {
  right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .form-group-lg .control-label {
    padding-top: 11px;
    font-size: 17px;
  }
}
@media (min-width: 768px) {
  .form-horizontal .form-group-sm .control-label {
    padding-top: 6px;
    font-size: 12px;
  }
}
.btn {
  display: inline-block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  touch-action: manipulation;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  white-space: nowrap;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  border-radius: 2px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
  color: #333;
  text-decoration: none;
}
.btn:active,
.btn.active {
  outline: 0;
  background-image: none;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  cursor: not-allowed;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
  box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
  pointer-events: none;
}
.btn-default {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.btn-default:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open > .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open > .dropdown-toggle.btn-default.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
  background-color: #fff;
  border-color: #ccc;
}
.btn-default .badge {
  color: #fff;
  background-color: #333;
}
.btn-primary {
  color: #fff;
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
  color: #fff;
  background-color: #286090;
  border-color: #122b40;
}
.btn-primary:hover {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open > .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open > .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open > .dropdown-toggle.btn-primary.focus {
  color: #fff;
  background-color: #204d74;
  border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary .badge {
  color: #337ab7;
  background-color: #fff;
}
.btn-success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.btn-success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open > .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open > .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open > .dropdown-toggle.btn-success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.btn-info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.btn-info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open > .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open > .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open > .dropdown-toggle.btn-info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.btn-warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning:focus,
.btn-warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.btn-warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active:hover,
.btn-warning.active:hover,
.open > .dropdown-toggle.btn-warning:hover,
.btn-warning:active:focus,
.btn-warning.active:focus,
.open > .dropdown-toggle.btn-warning:focus,
.btn-warning:active.focus,
.btn-warning.active.focus,
.open > .dropdown-toggle.btn-warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.btn-danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger:focus,
.btn-danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.btn-danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active:hover,
.btn-danger.active:hover,
.open > .dropdown-toggle.btn-danger:hover,
.btn-danger:active:focus,
.btn-danger.active:focus,
.open > .dropdown-toggle.btn-danger:focus,
.btn-danger:active.focus,
.btn-danger.active.focus,
.open > .dropdown-toggle.btn-danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger .badge {
  color: #d9534f;
  background-color: #fff;
}
.btn-link {
  color: #337ab7;
  font-weight: normal;
  border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
  background-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
  border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
  color: #23527c;
  text-decoration: underline;
  background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
  color: #777777;
  text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.btn-sm,
.btn-group-sm > .btn {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-xs,
.btn-group-xs > .btn {
  padding: 1px 5px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-block {
  display: block;
  width: 100%;
}
.btn-block + .btn-block {
  margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
  width: 100%;
}
.fade {
  opacity: 0;
  -webkit-transition: opacity 0.15s linear;
  -o-transition: opacity 0.15s linear;
  transition: opacity 0.15s linear;
}
.fade.in {
  opacity: 1;
}
.collapse {
  display: none;
}
.collapse.in {
  display: block;
}
tr.collapse.in {
  display: table-row;
}
tbody.collapse.in {
  display: table-row-group;
}
.collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -webkit-transition-duration: 0.35s;
  transition-duration: 0.35s;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}
.caret {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 2px;
  vertical-align: middle;
  border-top: 4px dashed;
  border-top: 4px solid \9;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}
.dropup,
.dropdown {
  position: relative;
}
.dropdown-toggle:focus {
  outline: 0;
}
.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  font-size: 13px;
  text-align: left;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.15);
  border-radius: 2px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  background-clip: padding-box;
}
.dropdown-menu.pull-right {
  right: 0;
  left: auto;
}
.dropdown-menu .divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.dropdown-menu > li > a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 1.42857143;
  color: #333333;
  white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  text-decoration: none;
  color: #262626;
  background-color: #f5f5f5;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
  color: #fff;
  text-decoration: none;
  outline: 0;
  background-color: #337ab7;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  color: #777777;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  text-decoration: none;
  background-color: transparent;
  background-image: none;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  cursor: not-allowed;
}
.open > .dropdown-menu {
  display: block;
}
.open > a {
  outline: 0;
}
.dropdown-menu-right {
  left: auto;
  right: 0;
}
.dropdown-menu-left {
  left: 0;
  right: auto;
}
.dropdown-header {
  display: block;
  padding: 3px 20px;
  font-size: 12px;
  line-height: 1.42857143;
  color: #777777;
  white-space: nowrap;
}
.dropdown-backdrop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  z-index: 990;
}
.pull-right > .dropdown-menu {
  right: 0;
  left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
  border-top: 0;
  border-bottom: 4px dashed;
  border-bottom: 4px solid \9;
  content: "";
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
  top: auto;
  bottom: 100%;
  margin-bottom: 2px;
}
@media (min-width: 541px) {
  .navbar-right .dropdown-menu {
    left: auto;
    right: 0;
  }
  .navbar-right .dropdown-menu-left {
    left: 0;
    right: auto;
  }
}
.btn-group,
.btn-group-vertical {
  position: relative;
  display: inline-block;
  vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
  position: relative;
  float: left;
}
.btn-group > .btn:hover,
.btn-group-vertical > .btn:hover,
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus,
.btn-group > .btn:active,
.btn-group-vertical > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn.active {
  z-index: 2;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
  margin-left: -1px;
}
.btn-toolbar {
  margin-left: -5px;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
  float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
  margin-left: 5px;
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: 0;
}
.btn-group > .btn:first-child {
  margin-left: 0;
}
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group > .btn-group {
  float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
  outline: 0;
}
.btn-group > .btn + .dropdown-toggle {
  padding-left: 8px;
  padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
  padding-left: 12px;
  padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn .caret {
  margin-left: 0;
}
.btn-lg .caret {
  border-width: 5px 5px 0;
  border-bottom-width: 0;
}
.dropup .btn-lg .caret {
  border-width: 0 5px 5px;
}
.btn-group-vertical > .btn,
.btn-group-vertical > .btn-group,
.btn-group-vertical > .btn-group > .btn {
  display: block;
  float: none;
  width: 100%;
  max-width: 100%;
}
.btn-group-vertical > .btn-group > .btn {
  float: none;
}
.btn-group-vertical > .btn + .btn,
.btn-group-vertical > .btn + .btn-group,
.btn-group-vertical > .btn-group + .btn,
.btn-group-vertical > .btn-group + .btn-group {
  margin-top: -1px;
  margin-left: 0;
}
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.btn-group-vertical > .btn:first-child:not(:last-child) {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:last-child:not(:first-child) {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.btn-group-justified {
  display: table;
  width: 100%;
  table-layout: fixed;
  border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
  float: none;
  display: table-cell;
  width: 1%;
}
.btn-group-justified > .btn-group .btn {
  width: 100%;
}
.btn-group-justified > .btn-group .dropdown-menu {
  left: auto;
}
[data-toggle="buttons"] > .btn input[type="radio"],
[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
[data-toggle="buttons"] > .btn input[type="checkbox"],
[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
  pointer-events: none;
}
.input-group {
  position: relative;
  display: table;
  border-collapse: separate;
}
.input-group[class*="col-"] {
  float: none;
  padding-left: 0;
  padding-right: 0;
}
.input-group .form-control {
  position: relative;
  z-index: 2;
  float: left;
  width: 100%;
  margin-bottom: 0;
}
.input-group .form-control:focus {
  z-index: 3;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  line-height: 45px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
  height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  line-height: 30px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
  height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
  display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.input-group-addon,
.input-group-btn {
  width: 1%;
  white-space: nowrap;
  vertical-align: middle;
}
.input-group-addon {
  padding: 6px 12px;
  font-size: 13px;
  font-weight: normal;
  line-height: 1;
  color: #555555;
  text-align: center;
  background-color: #eeeeee;
  border: 1px solid #ccc;
  border-radius: 2px;
}
.input-group-addon.input-sm {
  padding: 5px 10px;
  font-size: 12px;
  border-radius: 1px;
}
.input-group-addon.input-lg {
  padding: 10px 16px;
  font-size: 17px;
  border-radius: 3px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
  margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.input-group-addon:first-child {
  border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.input-group-addon:last-child {
  border-left: 0;
}
.input-group-btn {
  position: relative;
  font-size: 0;
  white-space: nowrap;
}
.input-group-btn > .btn {
  position: relative;
}
.input-group-btn > .btn + .btn {
  margin-left: -1px;
}
.input-group-btn > .btn:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
  z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
  margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
  z-index: 2;
  margin-left: -1px;
}
.nav {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
.nav > li {
  position: relative;
  display: block;
}
.nav > li > a {
  position: relative;
  display: block;
  padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.nav > li.disabled > a {
  color: #777777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
  color: #777777;
  text-decoration: none;
  background-color: transparent;
  cursor: not-allowed;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #eeeeee;
  border-color: #337ab7;
}
.nav .nav-divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.nav > li > a > img {
  max-width: none;
}
.nav-tabs {
  border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
  float: left;
  margin-bottom: -1px;
}
.nav-tabs > li > a {
  margin-right: 2px;
  line-height: 1.42857143;
  border: 1px solid transparent;
  border-radius: 2px 2px 0 0;
}
.nav-tabs > li > a:hover {
  border-color: #eeeeee #eeeeee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
  color: #555555;
  background-color: #fff;
  border: 1px solid #ddd;
  border-bottom-color: transparent;
  cursor: default;
}
.nav-tabs.nav-justified {
  width: 100%;
  border-bottom: 0;
}
.nav-tabs.nav-justified > li {
  float: none;
}
.nav-tabs.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-tabs.nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs.nav-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs.nav-justified > .active > a,
  .nav-tabs.nav-justified > .active > a:hover,
  .nav-tabs.nav-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.nav-pills > li {
  float: left;
}
.nav-pills > li > a {
  border-radius: 2px;
}
.nav-pills > li + li {
  margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
  color: #fff;
  background-color: #337ab7;
}
.nav-stacked > li {
  float: none;
}
.nav-stacked > li + li {
  margin-top: 2px;
  margin-left: 0;
}
.nav-justified {
  width: 100%;
}
.nav-justified > li {
  float: none;
}
.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs-justified {
  border-bottom: 0;
}
.nav-tabs-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs-justified > .active > a,
  .nav-tabs-justified > .active > a:hover,
  .nav-tabs-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.tab-content > .tab-pane {
  display: none;
}
.tab-content > .active {
  display: block;
}
.nav-tabs .dropdown-menu {
  margin-top: -1px;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar {
  position: relative;
  min-height: 30px;
  margin-bottom: 18px;
  border: 1px solid transparent;
}
@media (min-width: 541px) {
  .navbar {
    border-radius: 2px;
  }
}
@media (min-width: 541px) {
  .navbar-header {
    float: left;
  }
}
.navbar-collapse {
  overflow-x: visible;
  padding-right: 0px;
  padding-left: 0px;
  border-top: 1px solid transparent;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  -webkit-overflow-scrolling: touch;
}
.navbar-collapse.in {
  overflow-y: auto;
}
@media (min-width: 541px) {
  .navbar-collapse {
    width: auto;
    border-top: 0;
    box-shadow: none;
  }
  .navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
  }
  .navbar-collapse.in {
    overflow-y: visible;
  }
  .navbar-fixed-top .navbar-collapse,
  .navbar-static-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    padding-left: 0;
    padding-right: 0;
  }
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
  max-height: 340px;
}
@media (max-device-width: 540px) and (orientation: landscape) {
  .navbar-fixed-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    max-height: 200px;
  }
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
  margin-right: 0px;
  margin-left: 0px;
}
@media (min-width: 541px) {
  .container > .navbar-header,
  .container-fluid > .navbar-header,
  .container > .navbar-collapse,
  .container-fluid > .navbar-collapse {
    margin-right: 0;
    margin-left: 0;
  }
}
.navbar-static-top {
  z-index: 1000;
  border-width: 0 0 1px;
}
@media (min-width: 541px) {
  .navbar-static-top {
    border-radius: 0;
  }
}
.navbar-fixed-top,
.navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
}
@media (min-width: 541px) {
  .navbar-fixed-top,
  .navbar-fixed-bottom {
    border-radius: 0;
  }
}
.navbar-fixed-top {
  top: 0;
  border-width: 0 0 1px;
}
.navbar-fixed-bottom {
  bottom: 0;
  margin-bottom: 0;
  border-width: 1px 0 0;
}
.navbar-brand {
  float: left;
  padding: 6px 0px;
  font-size: 17px;
  line-height: 18px;
  height: 30px;
}
.navbar-brand:hover,
.navbar-brand:focus {
  text-decoration: none;
}
.navbar-brand > img {
  display: block;
}
@media (min-width: 541px) {
  .navbar > .container .navbar-brand,
  .navbar > .container-fluid .navbar-brand {
    margin-left: 0px;
  }
}
.navbar-toggle {
  position: relative;
  float: right;
  margin-right: 0px;
  padding: 9px 10px;
  margin-top: -2px;
  margin-bottom: -2px;
  background-color: transparent;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 2px;
}
.navbar-toggle:focus {
  outline: 0;
}
.navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
@media (min-width: 541px) {
  .navbar-toggle {
    display: none;
  }
}
.navbar-nav {
  margin: 3px 0px;
}
.navbar-nav > li > a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 18px;
}
@media (max-width: 540px) {
  .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    box-shadow: none;
  }
  .navbar-nav .open .dropdown-menu > li > a,
  .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  .navbar-nav .open .dropdown-menu > li > a {
    line-height: 18px;
  }
  .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-nav .open .dropdown-menu > li > a:focus {
    background-image: none;
  }
}
@media (min-width: 541px) {
  .navbar-nav {
    float: left;
    margin: 0;
  }
  .navbar-nav > li {
    float: left;
  }
  .navbar-nav > li > a {
    padding-top: 6px;
    padding-bottom: 6px;
  }
}
.navbar-form {
  margin-left: 0px;
  margin-right: 0px;
  padding: 10px 0px;
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  margin-top: -1px;
  margin-bottom: -1px;
}
@media (min-width: 768px) {
  .navbar-form .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .navbar-form .form-control-static {
    display: inline-block;
  }
  .navbar-form .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .navbar-form .input-group .input-group-addon,
  .navbar-form .input-group .input-group-btn,
  .navbar-form .input-group .form-control {
    width: auto;
  }
  .navbar-form .input-group > .form-control {
    width: 100%;
  }
  .navbar-form .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio,
  .navbar-form .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio label,
  .navbar-form .checkbox label {
    padding-left: 0;
  }
  .navbar-form .radio input[type="radio"],
  .navbar-form .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .navbar-form .has-feedback .form-control-feedback {
    top: 0;
  }
}
@media (max-width: 540px) {
  .navbar-form .form-group {
    margin-bottom: 5px;
  }
  .navbar-form .form-group:last-child {
    margin-bottom: 0;
  }
}
@media (min-width: 541px) {
  .navbar-form {
    width: auto;
    border: 0;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
}
.navbar-nav > li > .dropdown-menu {
  margin-top: 0;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  margin-bottom: 0;
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.navbar-btn {
  margin-top: -1px;
  margin-bottom: -1px;
}
.navbar-btn.btn-sm {
  margin-top: 0px;
  margin-bottom: 0px;
}
.navbar-btn.btn-xs {
  margin-top: 4px;
  margin-bottom: 4px;
}
.navbar-text {
  margin-top: 6px;
  margin-bottom: 6px;
}
@media (min-width: 541px) {
  .navbar-text {
    float: left;
    margin-left: 0px;
    margin-right: 0px;
  }
}
@media (min-width: 541px) {
  .navbar-left {
    float: left !important;
    float: left;
  }
  .navbar-right {
    float: right !important;
    float: right;
    margin-right: 0px;
  }
  .navbar-right ~ .navbar-right {
    margin-right: 0;
  }
}
.navbar-default {
  background-color: #f8f8f8;
  border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
  color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
  color: #5e5e5e;
  background-color: transparent;
}
.navbar-default .navbar-text {
  color: #777;
}
.navbar-default .navbar-nav > li > a {
  color: #777;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
  color: #333;
  background-color: transparent;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
  color: #555;
  background-color: #e7e7e7;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
  color: #ccc;
  background-color: transparent;
}
.navbar-default .navbar-toggle {
  border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
  background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
  background-color: #888;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
  border-color: #e7e7e7;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
  background-color: #e7e7e7;
  color: #555;
}
@media (max-width: 540px) {
  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
    color: #777;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #333;
    background-color: transparent;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #555;
    background-color: #e7e7e7;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #ccc;
    background-color: transparent;
  }
}
.navbar-default .navbar-link {
  color: #777;
}
.navbar-default .navbar-link:hover {
  color: #333;
}
.navbar-default .btn-link {
  color: #777;
}
.navbar-default .btn-link:hover,
.navbar-default .btn-link:focus {
  color: #333;
}
.navbar-default .btn-link[disabled]:hover,
fieldset[disabled] .navbar-default .btn-link:hover,
.navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:focus {
  color: #ccc;
}
.navbar-inverse {
  background-color: #222;
  border-color: #080808;
}
.navbar-inverse .navbar-brand {
  color: #9d9d9d;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-text {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
  color: #fff;
  background-color: #080808;
}
.navbar-inverse .navbar-nav > .disabled > a,
.navbar-inverse .navbar-nav > .disabled > a:hover,
.navbar-inverse .navbar-nav > .disabled > a:focus {
  color: #444;
  background-color: transparent;
}
.navbar-inverse .navbar-toggle {
  border-color: #333;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
  background-color: #333;
}
.navbar-inverse .navbar-toggle .icon-bar {
  background-color: #fff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
  border-color: #101010;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
  background-color: #080808;
  color: #fff;
}
@media (max-width: 540px) {
  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
    border-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
    color: #9d9d9d;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #fff;
    background-color: transparent;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #fff;
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #444;
    background-color: transparent;
  }
}
.navbar-inverse .navbar-link {
  color: #9d9d9d;
}
.navbar-inverse .navbar-link:hover {
  color: #fff;
}
.navbar-inverse .btn-link {
  color: #9d9d9d;
}
.navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link:focus {
  color: #fff;
}
.navbar-inverse .btn-link[disabled]:hover,
fieldset[disabled] .navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:focus {
  color: #444;
}
.breadcrumb {
  padding: 8px 15px;
  margin-bottom: 18px;
  list-style: none;
  background-color: #f5f5f5;
  border-radius: 2px;
}
.breadcrumb > li {
  display: inline-block;
}
.breadcrumb > li + li:before {
  content: "/\00a0";
  padding: 0 5px;
  color: #5e5e5e;
}
.breadcrumb > .active {
  color: #777777;
}
.pagination {
  display: inline-block;
  padding-left: 0;
  margin: 18px 0;
  border-radius: 2px;
}
.pagination > li {
  display: inline;
}
.pagination > li > a,
.pagination > li > span {
  position: relative;
  float: left;
  padding: 6px 12px;
  line-height: 1.42857143;
  text-decoration: none;
  color: #337ab7;
  background-color: #fff;
  border: 1px solid #ddd;
  margin-left: -1px;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
  margin-left: 0;
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
  border-bottom-right-radius: 2px;
  border-top-right-radius: 2px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
  z-index: 2;
  color: #23527c;
  background-color: #eeeeee;
  border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
  z-index: 3;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
  cursor: default;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
  color: #777777;
  background-color: #fff;
  border-color: #ddd;
  cursor: not-allowed;
}
.pagination-lg > li > a,
.pagination-lg > li > span {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
  border-bottom-left-radius: 3px;
  border-top-left-radius: 3px;
}
.pagination-lg > li:last-child > a,
.pagination-lg > li:last-child > span {
  border-bottom-right-radius: 3px;
  border-top-right-radius: 3px;
}
.pagination-sm > li > a,
.pagination-sm > li > span {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
  border-bottom-left-radius: 1px;
  border-top-left-radius: 1px;
}
.pagination-sm > li:last-child > a,
.pagination-sm > li:last-child > span {
  border-bottom-right-radius: 1px;
  border-top-right-radius: 1px;
}
.pager {
  padding-left: 0;
  margin: 18px 0;
  list-style: none;
  text-align: center;
}
.pager li {
  display: inline;
}
.pager li > a,
.pager li > span {
  display: inline-block;
  padding: 5px 14px;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 15px;
}
.pager li > a:hover,
.pager li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.pager .next > a,
.pager .next > span {
  float: right;
}
.pager .previous > a,
.pager .previous > span {
  float: left;
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
  color: #777777;
  background-color: #fff;
  cursor: not-allowed;
}
.label {
  display: inline;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
}
a.label:hover,
a.label:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.label:empty {
  display: none;
}
.btn .label {
  position: relative;
  top: -1px;
}
.label-default {
  background-color: #777777;
}
.label-default[href]:hover,
.label-default[href]:focus {
  background-color: #5e5e5e;
}
.label-primary {
  background-color: #337ab7;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
  background-color: #286090;
}
.label-success {
  background-color: #5cb85c;
}
.label-success[href]:hover,
.label-success[href]:focus {
  background-color: #449d44;
}
.label-info {
  background-color: #5bc0de;
}
.label-info[href]:hover,
.label-info[href]:focus {
  background-color: #31b0d5;
}
.label-warning {
  background-color: #f0ad4e;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
  background-color: #ec971f;
}
.label-danger {
  background-color: #d9534f;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
  background-color: #c9302c;
}
.badge {
  display: inline-block;
  min-width: 10px;
  padding: 3px 7px;
  font-size: 12px;
  font-weight: bold;
  color: #fff;
  line-height: 1;
  vertical-align: middle;
  white-space: nowrap;
  text-align: center;
  background-color: #777777;
  border-radius: 10px;
}
.badge:empty {
  display: none;
}
.btn .badge {
  position: relative;
  top: -1px;
}
.btn-xs .badge,
.btn-group-xs > .btn .badge {
  top: 0;
  padding: 1px 5px;
}
a.badge:hover,
a.badge:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
  color: #337ab7;
  background-color: #fff;
}
.list-group-item > .badge {
  float: right;
}
.list-group-item > .badge + .badge {
  margin-right: 5px;
}
.nav-pills > li > a > .badge {
  margin-left: 3px;
}
.jumbotron {
  padding-top: 30px;
  padding-bottom: 30px;
  margin-bottom: 30px;
  color: inherit;
  background-color: #eeeeee;
}
.jumbotron h1,
.jumbotron .h1 {
  color: inherit;
}
.jumbotron p {
  margin-bottom: 15px;
  font-size: 20px;
  font-weight: 200;
}
.jumbotron > hr {
  border-top-color: #d5d5d5;
}
.container .jumbotron,
.container-fluid .jumbotron {
  border-radius: 3px;
  padding-left: 0px;
  padding-right: 0px;
}
.jumbotron .container {
  max-width: 100%;
}
@media screen and (min-width: 768px) {
  .jumbotron {
    padding-top: 48px;
    padding-bottom: 48px;
  }
  .container .jumbotron,
  .container-fluid .jumbotron {
    padding-left: 60px;
    padding-right: 60px;
  }
  .jumbotron h1,
  .jumbotron .h1 {
    font-size: 59px;
  }
}
.thumbnail {
  display: block;
  padding: 4px;
  margin-bottom: 18px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: border 0.2s ease-in-out;
  -o-transition: border 0.2s ease-in-out;
  transition: border 0.2s ease-in-out;
}
.thumbnail > img,
.thumbnail a > img {
  margin-left: auto;
  margin-right: auto;
}
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
  border-color: #337ab7;
}
.thumbnail .caption {
  padding: 9px;
  color: #000;
}
.alert {
  padding: 15px;
  margin-bottom: 18px;
  border: 1px solid transparent;
  border-radius: 2px;
}
.alert h4 {
  margin-top: 0;
  color: inherit;
}
.alert .alert-link {
  font-weight: bold;
}
.alert > p,
.alert > ul {
  margin-bottom: 0;
}
.alert > p + p {
  margin-top: 5px;
}
.alert-dismissable,
.alert-dismissible {
  padding-right: 35px;
}
.alert-dismissable .close,
.alert-dismissible .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
.alert-success {
  background-color: #dff0d8;
  border-color: #d6e9c6;
  color: #3c763d;
}
.alert-success hr {
  border-top-color: #c9e2b3;
}
.alert-success .alert-link {
  color: #2b542c;
}
.alert-info {
  background-color: #d9edf7;
  border-color: #bce8f1;
  color: #31708f;
}
.alert-info hr {
  border-top-color: #a6e1ec;
}
.alert-info .alert-link {
  color: #245269;
}
.alert-warning {
  background-color: #fcf8e3;
  border-color: #faebcc;
  color: #8a6d3b;
}
.alert-warning hr {
  border-top-color: #f7e1b5;
}
.alert-warning .alert-link {
  color: #66512c;
}
.alert-danger {
  background-color: #f2dede;
  border-color: #ebccd1;
  color: #a94442;
}
.alert-danger hr {
  border-top-color: #e4b9c0;
}
.alert-danger .alert-link {
  color: #843534;
}
@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
.progress {
  overflow: hidden;
  height: 18px;
  margin-bottom: 18px;
  background-color: #f5f5f5;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar {
  float: left;
  width: 0%;
  height: 100%;
  font-size: 12px;
  line-height: 18px;
  color: #fff;
  text-align: center;
  background-color: #337ab7;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  -webkit-transition: width 0.6s ease;
  -o-transition: width 0.6s ease;
  transition: width 0.6s ease;
}
.progress-striped .progress-bar,
.progress-bar-striped {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
  -webkit-animation: progress-bar-stripes 2s linear infinite;
  -o-animation: progress-bar-stripes 2s linear infinite;
  animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
  background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
  background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
  background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
  background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.media {
  margin-top: 15px;
}
.media:first-child {
  margin-top: 0;
}
.media,
.media-body {
  zoom: 1;
  overflow: hidden;
}
.media-body {
  width: 10000px;
}
.media-object {
  display: block;
}
.media-object.img-thumbnail {
  max-width: none;
}
.media-right,
.media > .pull-right {
  padding-left: 10px;
}
.media-left,
.media > .pull-left {
  padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
  display: table-cell;
  vertical-align: top;
}
.media-middle {
  vertical-align: middle;
}
.media-bottom {
  vertical-align: bottom;
}
.media-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.media-list {
  padding-left: 0;
  list-style: none;
}
.list-group {
  margin-bottom: 20px;
  padding-left: 0;
}
.list-group-item {
  position: relative;
  display: block;
  padding: 10px 15px;
  margin-bottom: -1px;
  background-color: #fff;
  border: 1px solid #ddd;
}
.list-group-item:first-child {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
}
.list-group-item:last-child {
  margin-bottom: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
a.list-group-item,
button.list-group-item {
  color: #555;
}
a.list-group-item .list-group-item-heading,
button.list-group-item .list-group-item-heading {
  color: #333;
}
a.list-group-item:hover,
button.list-group-item:hover,
a.list-group-item:focus,
button.list-group-item:focus {
  text-decoration: none;
  color: #555;
  background-color: #f5f5f5;
}
button.list-group-item {
  width: 100%;
  text-align: left;
}
.list-group-item.disabled,
.list-group-item.disabled:hover,
.list-group-item.disabled:focus {
  background-color: #eeeeee;
  color: #777777;
  cursor: not-allowed;
}
.list-group-item.disabled .list-group-item-heading,
.list-group-item.disabled:hover .list-group-item-heading,
.list-group-item.disabled:focus .list-group-item-heading {
  color: inherit;
}
.list-group-item.disabled .list-group-item-text,
.list-group-item.disabled:hover .list-group-item-text,
.list-group-item.disabled:focus .list-group-item-text {
  color: #777777;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
  z-index: 2;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.list-group-item.active .list-group-item-heading,
.list-group-item.active:hover .list-group-item-heading,
.list-group-item.active:focus .list-group-item-heading,
.list-group-item.active .list-group-item-heading > small,
.list-group-item.active:hover .list-group-item-heading > small,
.list-group-item.active:focus .list-group-item-heading > small,
.list-group-item.active .list-group-item-heading > .small,
.list-group-item.active:hover .list-group-item-heading > .small,
.list-group-item.active:focus .list-group-item-heading > .small {
  color: inherit;
}
.list-group-item.active .list-group-item-text,
.list-group-item.active:hover .list-group-item-text,
.list-group-item.active:focus .list-group-item-text {
  color: #c7ddef;
}
.list-group-item-success {
  color: #3c763d;
  background-color: #dff0d8;
}
a.list-group-item-success,
button.list-group-item-success {
  color: #3c763d;
}
a.list-group-item-success .list-group-item-heading,
button.list-group-item-success .list-group-item-heading {
  color: inherit;
}
a.list-group-item-success:hover,
button.list-group-item-success:hover,
a.list-group-item-success:focus,
button.list-group-item-success:focus {
  color: #3c763d;
  background-color: #d0e9c6;
}
a.list-group-item-success.active,
button.list-group-item-success.active,
a.list-group-item-success.active:hover,
button.list-group-item-success.active:hover,
a.list-group-item-success.active:focus,
button.list-group-item-success.active:focus {
  color: #fff;
  background-color: #3c763d;
  border-color: #3c763d;
}
.list-group-item-info {
  color: #31708f;
  background-color: #d9edf7;
}
a.list-group-item-info,
button.list-group-item-info {
  color: #31708f;
}
a.list-group-item-info .list-group-item-heading,
button.list-group-item-info .list-group-item-heading {
  color: inherit;
}
a.list-group-item-info:hover,
button.list-group-item-info:hover,
a.list-group-item-info:focus,
button.list-group-item-info:focus {
  color: #31708f;
  background-color: #c4e3f3;
}
a.list-group-item-info.active,
button.list-group-item-info.active,
a.list-group-item-info.active:hover,
button.list-group-item-info.active:hover,
a.list-group-item-info.active:focus,
button.list-group-item-info.active:focus {
  color: #fff;
  background-color: #31708f;
  border-color: #31708f;
}
.list-group-item-warning {
  color: #8a6d3b;
  background-color: #fcf8e3;
}
a.list-group-item-warning,
button.list-group-item-warning {
  color: #8a6d3b;
}
a.list-group-item-warning .list-group-item-heading,
button.list-group-item-warning .list-group-item-heading {
  color: inherit;
}
a.list-group-item-warning:hover,
button.list-group-item-warning:hover,
a.list-group-item-warning:focus,
button.list-group-item-warning:focus {
  color: #8a6d3b;
  background-color: #faf2cc;
}
a.list-group-item-warning.active,
button.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
button.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus,
button.list-group-item-warning.active:focus {
  color: #fff;
  background-color: #8a6d3b;
  border-color: #8a6d3b;
}
.list-group-item-danger {
  color: #a94442;
  background-color: #f2dede;
}
a.list-group-item-danger,
button.list-group-item-danger {
  color: #a94442;
}
a.list-group-item-danger .list-group-item-heading,
button.list-group-item-danger .list-group-item-heading {
  color: inherit;
}
a.list-group-item-danger:hover,
button.list-group-item-danger:hover,
a.list-group-item-danger:focus,
button.list-group-item-danger:focus {
  color: #a94442;
  background-color: #ebcccc;
}
a.list-group-item-danger.active,
button.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
button.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus,
button.list-group-item-danger.active:focus {
  color: #fff;
  background-color: #a94442;
  border-color: #a94442;
}
.list-group-item-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.list-group-item-text {
  margin-bottom: 0;
  line-height: 1.3;
}
.panel {
  margin-bottom: 18px;
  background-color: #fff;
  border: 1px solid transparent;
  border-radius: 2px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.panel-body {
  padding: 15px;
}
.panel-heading {
  padding: 10px 15px;
  border-bottom: 1px solid transparent;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel-heading > .dropdown .dropdown-toggle {
  color: inherit;
}
.panel-title {
  margin-top: 0;
  margin-bottom: 0;
  font-size: 15px;
  color: inherit;
}
.panel-title > a,
.panel-title > small,
.panel-title > .small,
.panel-title > small > a,
.panel-title > .small > a {
  color: inherit;
}
.panel-footer {
  padding: 10px 15px;
  background-color: #f5f5f5;
  border-top: 1px solid #ddd;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .list-group,
.panel > .panel-collapse > .list-group {
  margin-bottom: 0;
}
.panel > .list-group .list-group-item,
.panel > .panel-collapse > .list-group .list-group-item {
  border-width: 1px 0;
  border-radius: 0;
}
.panel > .list-group:first-child .list-group-item:first-child,
.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
  border-top: 0;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .list-group:last-child .list-group-item:last-child,
.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
  border-bottom: 0;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.panel-heading + .list-group .list-group-item:first-child {
  border-top-width: 0;
}
.list-group + .panel-footer {
  border-top-width: 0;
}
.panel > .table,
.panel > .table-responsive > .table,
.panel > .panel-collapse > .table {
  margin-bottom: 0;
}
.panel > .table caption,
.panel > .table-responsive > .table caption,
.panel > .panel-collapse > .table caption {
  padding-left: 15px;
  padding-right: 15px;
}
.panel > .table:first-child,
.panel > .table-responsive:first-child > .table:first-child {
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
  border-top-left-radius: 1px;
  border-top-right-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
  border-top-right-radius: 1px;
}
.panel > .table:last-child,
.panel > .table-responsive:last-child > .table:last-child {
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
  border-bottom-left-radius: 1px;
  border-bottom-right-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
  border-bottom-right-radius: 1px;
}
.panel > .panel-body + .table,
.panel > .panel-body + .table-responsive,
.panel > .table + .panel-body,
.panel > .table-responsive + .panel-body {
  border-top: 1px solid #ddd;
}
.panel > .table > tbody:first-child > tr:first-child th,
.panel > .table > tbody:first-child > tr:first-child td {
  border-top: 0;
}
.panel > .table-bordered,
.panel > .table-responsive > .table-bordered {
  border: 0;
}
.panel > .table-bordered > thead > tr > th:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
.panel > .table-bordered > tbody > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
.panel > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-bordered > thead > tr > td:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
.panel > .table-bordered > tbody > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
.panel > .table-bordered > tfoot > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
  border-left: 0;
}
.panel > .table-bordered > thead > tr > th:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
.panel > .table-bordered > tbody > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
.panel > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-bordered > thead > tr > td:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
.panel > .table-bordered > tbody > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
.panel > .table-bordered > tfoot > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
  border-right: 0;
}
.panel > .table-bordered > thead > tr:first-child > td,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
.panel > .table-bordered > tbody > tr:first-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
.panel > .table-bordered > thead > tr:first-child > th,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
.panel > .table-bordered > tbody > tr:first-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
  border-bottom: 0;
}
.panel > .table-bordered > tbody > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
.panel > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-bordered > tbody > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
.panel > .table-bordered > tfoot > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
  border-bottom: 0;
}
.panel > .table-responsive {
  border: 0;
  margin-bottom: 0;
}
.panel-group {
  margin-bottom: 18px;
}
.panel-group .panel {
  margin-bottom: 0;
  border-radius: 2px;
}
.panel-group .panel + .panel {
  margin-top: 5px;
}
.panel-group .panel-heading {
  border-bottom: 0;
}
.panel-group .panel-heading + .panel-collapse > .panel-body,
.panel-group .panel-heading + .panel-collapse > .list-group {
  border-top: 1px solid #ddd;
}
.panel-group .panel-footer {
  border-top: 0;
}
.panel-group .panel-footer + .panel-collapse .panel-body {
  border-bottom: 1px solid #ddd;
}
.panel-default {
  border-color: #ddd;
}
.panel-default > .panel-heading {
  color: #333333;
  background-color: #f5f5f5;
  border-color: #ddd;
}
.panel-default > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ddd;
}
.panel-default > .panel-heading .badge {
  color: #f5f5f5;
  background-color: #333333;
}
.panel-default > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ddd;
}
.panel-primary {
  border-color: #337ab7;
}
.panel-primary > .panel-heading {
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #337ab7;
}
.panel-primary > .panel-heading .badge {
  color: #337ab7;
  background-color: #fff;
}
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #337ab7;
}
.panel-success {
  border-color: #d6e9c6;
}
.panel-success > .panel-heading {
  color: #3c763d;
  background-color: #dff0d8;
  border-color: #d6e9c6;
}
.panel-success > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #d6e9c6;
}
.panel-success > .panel-heading .badge {
  color: #dff0d8;
  background-color: #3c763d;
}
.panel-success > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #d6e9c6;
}
.panel-info {
  border-color: #bce8f1;
}
.panel-info > .panel-heading {
  color: #31708f;
  background-color: #d9edf7;
  border-color: #bce8f1;
}
.panel-info > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #bce8f1;
}
.panel-info > .panel-heading .badge {
  color: #d9edf7;
  background-color: #31708f;
}
.panel-info > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #bce8f1;
}
.panel-warning {
  border-color: #faebcc;
}
.panel-warning > .panel-heading {
  color: #8a6d3b;
  background-color: #fcf8e3;
  border-color: #faebcc;
}
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #faebcc;
}
.panel-warning > .panel-heading .badge {
  color: #fcf8e3;
  background-color: #8a6d3b;
}
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #faebcc;
}
.panel-danger {
  border-color: #ebccd1;
}
.panel-danger > .panel-heading {
  color: #a94442;
  background-color: #f2dede;
  border-color: #ebccd1;
}
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ebccd1;
}
.panel-danger > .panel-heading .badge {
  color: #f2dede;
  background-color: #a94442;
}
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ebccd1;
}
.embed-responsive {
  position: relative;
  display: block;
  height: 0;
  padding: 0;
  overflow: hidden;
}
.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  height: 100%;
  width: 100%;
  border: 0;
}
.embed-responsive-16by9 {
  padding-bottom: 56.25%;
}
.embed-responsive-4by3 {
  padding-bottom: 75%;
}
.well {
  min-height: 20px;
  padding: 19px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border: 1px solid #e3e3e3;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.well blockquote {
  border-color: #ddd;
  border-color: rgba(0, 0, 0, 0.15);
}
.well-lg {
  padding: 24px;
  border-radius: 3px;
}
.well-sm {
  padding: 9px;
  border-radius: 1px;
}
.close {
  float: right;
  font-size: 19.5px;
  font-weight: bold;
  line-height: 1;
  color: #000;
  text-shadow: 0 1px 0 #fff;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
.modal-open {
  overflow: hidden;
}
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  -webkit-overflow-scrolling: touch;
  outline: 0;
}
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  -o-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -moz-transition: -moz-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}
.modal.in .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}
.modal-dialog {
  position: relative;
  width: auto;
  margin: 10px;
}
.modal-content {
  position: relative;
  background-color: #fff;
  border: 1px solid #999;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  background-clip: padding-box;
  outline: 0;
}
.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  background-color: #000;
}
.modal-backdrop.fade {
  opacity: 0;
  filter: alpha(opacity=0);
}
.modal-backdrop.in {
  opacity: 0.5;
  filter: alpha(opacity=50);
}
.modal-header {
  padding: 15px;
  border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
  margin-top: -2px;
}
.modal-title {
  margin: 0;
  line-height: 1.42857143;
}
.modal-body {
  position: relative;
  padding: 15px;
}
.modal-footer {
  padding: 15px;
  text-align: right;
  border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
  margin-left: 5px;
  margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}
.modal-scrollbar-measure {
  position: absolute;
  top: -9999px;
  width: 50px;
  height: 50px;
  overflow: scroll;
}
@media (min-width: 768px) {
  .modal-dialog {
    width: 600px;
    margin: 30px auto;
  }
  .modal-content {
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  }
  .modal-sm {
    width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg {
    width: 900px;
  }
}
.tooltip {
  position: absolute;
  z-index: 1070;
  display: block;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 12px;
  opacity: 0;
  filter: alpha(opacity=0);
}
.tooltip.in {
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.tooltip.top {
  margin-top: -3px;
  padding: 5px 0;
}
.tooltip.right {
  margin-left: 3px;
  padding: 0 5px;
}
.tooltip.bottom {
  margin-top: 3px;
  padding: 5px 0;
}
.tooltip.left {
  margin-left: -3px;
  padding: 0 5px;
}
.tooltip-inner {
  max-width: 200px;
  padding: 3px 8px;
  color: #fff;
  text-align: center;
  background-color: #000;
  border-radius: 2px;
}
.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.tooltip.top .tooltip-arrow {
  bottom: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
  bottom: 0;
  right: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
  bottom: 0;
  left: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
  top: 50%;
  left: 0;
  margin-top: -5px;
  border-width: 5px 5px 5px 0;
  border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
  top: 50%;
  right: 0;
  margin-top: -5px;
  border-width: 5px 0 5px 5px;
  border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
  top: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
  top: 0;
  right: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
  top: 0;
  left: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1060;
  display: none;
  max-width: 276px;
  padding: 1px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 13px;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}
.popover.top {
  margin-top: -10px;
}
.popover.right {
  margin-left: 10px;
}
.popover.bottom {
  margin-top: 10px;
}
.popover.left {
  margin-left: -10px;
}
.popover-title {
  margin: 0;
  padding: 8px 14px;
  font-size: 13px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ebebeb;
  border-radius: 2px 2px 0 0;
}
.popover-content {
  padding: 9px 14px;
}
.popover > .arrow,
.popover > .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.popover > .arrow {
  border-width: 11px;
}
.popover > .arrow:after {
  border-width: 10px;
  content: "";
}
.popover.top > .arrow {
  left: 50%;
  margin-left: -11px;
  border-bottom-width: 0;
  border-top-color: #999999;
  border-top-color: rgba(0, 0, 0, 0.25);
  bottom: -11px;
}
.popover.top > .arrow:after {
  content: " ";
  bottom: 1px;
  margin-left: -10px;
  border-bottom-width: 0;
  border-top-color: #fff;
}
.popover.right > .arrow {
  top: 50%;
  left: -11px;
  margin-top: -11px;
  border-left-width: 0;
  border-right-color: #999999;
  border-right-color: rgba(0, 0, 0, 0.25);
}
.popover.right > .arrow:after {
  content: " ";
  left: 1px;
  bottom: -10px;
  border-left-width: 0;
  border-right-color: #fff;
}
.popover.bottom > .arrow {
  left: 50%;
  margin-left: -11px;
  border-top-width: 0;
  border-bottom-color: #999999;
  border-bottom-color: rgba(0, 0, 0, 0.25);
  top: -11px;
}
.popover.bottom > .arrow:after {
  content: " ";
  top: 1px;
  margin-left: -10px;
  border-top-width: 0;
  border-bottom-color: #fff;
}
.popover.left > .arrow {
  top: 50%;
  right: -11px;
  margin-top: -11px;
  border-right-width: 0;
  border-left-color: #999999;
  border-left-color: rgba(0, 0, 0, 0.25);
}
.popover.left > .arrow:after {
  content: " ";
  right: 1px;
  border-right-width: 0;
  border-left-color: #fff;
  bottom: -10px;
}
.carousel {
  position: relative;
}
.carousel-inner {
  position: relative;
  overflow: hidden;
  width: 100%;
}
.carousel-inner > .item {
  display: none;
  position: relative;
  -webkit-transition: 0.6s ease-in-out left;
  -o-transition: 0.6s ease-in-out left;
  transition: 0.6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  line-height: 1;
}
@media all and (transform-3d), (-webkit-transform-3d) {
  .carousel-inner > .item {
    -webkit-transition: -webkit-transform 0.6s ease-in-out;
    -moz-transition: -moz-transform 0.6s ease-in-out;
    -o-transition: -o-transform 0.6s ease-in-out;
    transition: transform 0.6s ease-in-out;
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-perspective: 1000px;
    -moz-perspective: 1000px;
    perspective: 1000px;
  }
  .carousel-inner > .item.next,
  .carousel-inner > .item.active.right {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.prev,
  .carousel-inner > .item.active.left {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.next.left,
  .carousel-inner > .item.prev.right,
  .carousel-inner > .item.active {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    left: 0;
  }
}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
  display: block;
}
.carousel-inner > .active {
  left: 0;
}
.carousel-inner > .next,
.carousel-inner > .prev {
  position: absolute;
  top: 0;
  width: 100%;
}
.carousel-inner > .next {
  left: 100%;
}
.carousel-inner > .prev {
  left: -100%;
}
.carousel-inner > .next.left,
.carousel-inner > .prev.right {
  left: 0;
}
.carousel-inner > .active.left {
  left: -100%;
}
.carousel-inner > .active.right {
  left: 100%;
}
.carousel-control {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  width: 15%;
  opacity: 0.5;
  filter: alpha(opacity=50);
  font-size: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  background-color: rgba(0, 0, 0, 0);
}
.carousel-control.left {
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
}
.carousel-control.right {
  left: auto;
  right: 0;
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
}
.carousel-control:hover,
.carousel-control:focus {
  outline: 0;
  color: #fff;
  text-decoration: none;
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.carousel-control .icon-prev,
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
  position: absolute;
  top: 50%;
  margin-top: -10px;
  z-index: 5;
  display: inline-block;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
  left: 50%;
  margin-left: -10px;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
  right: 50%;
  margin-right: -10px;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
  width: 20px;
  height: 20px;
  line-height: 1;
  font-family: serif;
}
.carousel-control .icon-prev:before {
  content: '\2039';
}
.carousel-control .icon-next:before {
  content: '\203a';
}
.carousel-indicators {
  position: absolute;
  bottom: 10px;
  left: 50%;
  z-index: 15;
  width: 60%;
  margin-left: -30%;
  padding-left: 0;
  list-style: none;
  text-align: center;
}
.carousel-indicators li {
  display: inline-block;
  width: 10px;
  height: 10px;
  margin: 1px;
  text-indent: -999px;
  border: 1px solid #fff;
  border-radius: 10px;
  cursor: pointer;
  background-color: #000 \9;
  background-color: rgba(0, 0, 0, 0);
}
.carousel-indicators .active {
  margin: 0;
  width: 12px;
  height: 12px;
  background-color: #fff;
}
.carousel-caption {
  position: absolute;
  left: 15%;
  right: 15%;
  bottom: 20px;
  z-index: 10;
  padding-top: 20px;
  padding-bottom: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.carousel-caption .btn {
  text-shadow: none;
}
@media screen and (min-width: 768px) {
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-prev,
  .carousel-control .icon-next {
    width: 30px;
    height: 30px;
    margin-top: -10px;
    font-size: 30px;
  }
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .icon-prev {
    margin-left: -10px;
  }
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-next {
    margin-right: -10px;
  }
  .carousel-caption {
    left: 20%;
    right: 20%;
    padding-bottom: 30px;
  }
  .carousel-indicators {
    bottom: 20px;
  }
}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.dl-horizontal dd:after,
.container:before,
.container:after,
.container-fluid:before,
.container-fluid:after,
.row:before,
.row:after,
.form-horizontal .form-group:before,
.form-horizontal .form-group:after,
.btn-toolbar:before,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:before,
.btn-group-vertical > .btn-group:after,
.nav:before,
.nav:after,
.navbar:before,
.navbar:after,
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after,
.pager:before,
.pager:after,
.panel-body:before,
.panel-body:after,
.modal-header:before,
.modal-header:after,
.modal-footer:before,
.modal-footer:after,
.item_buttons:before,
.item_buttons:after {
  content: " ";
  display: table;
}
.clearfix:after,
.dl-horizontal dd:after,
.container:after,
.container-fluid:after,
.row:after,
.form-horizontal .form-group:after,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:after,
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after,
.pager:after,
.panel-body:after,
.modal-header:after,
.modal-footer:after,
.item_buttons:after {
  clear: both;
}
.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.pull-right {
  float: right !important;
}
.pull-left {
  float: left !important;
}
.hide {
  display: none !important;
}
.show {
  display: block !important;
}
.invisible {
  visibility: hidden;
}
.text-hide {
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}
.hidden {
  display: none !important;
}
.affix {
  position: fixed;
}
@-ms-viewport {
  width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
  display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
  display: none !important;
}
@media (max-width: 767px) {
  .visible-xs {
    display: block !important;
  }
  table.visible-xs {
    display: table !important;
  }
  tr.visible-xs {
    display: table-row !important;
  }
  th.visible-xs,
  td.visible-xs {
    display: table-cell !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-block {
    display: block !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline {
    display: inline !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm {
    display: block !important;
  }
  table.visible-sm {
    display: table !important;
  }
  tr.visible-sm {
    display: table-row !important;
  }
  th.visible-sm,
  td.visible-sm {
    display: table-cell !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-block {
    display: block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline {
    display: inline !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md {
    display: block !important;
  }
  table.visible-md {
    display: table !important;
  }
  tr.visible-md {
    display: table-row !important;
  }
  th.visible-md,
  td.visible-md {
    display: table-cell !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-block {
    display: block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline {
    display: inline !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg {
    display: block !important;
  }
  table.visible-lg {
    display: table !important;
  }
  tr.visible-lg {
    display: table-row !important;
  }
  th.visible-lg,
  td.visible-lg {
    display: table-cell !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-block {
    display: block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline {
    display: inline !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline-block {
    display: inline-block !important;
  }
}
@media (max-width: 767px) {
  .hidden-xs {
    display: none !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .hidden-sm {
    display: none !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .hidden-md {
    display: none !important;
  }
}
@media (min-width: 1200px) {
  .hidden-lg {
    display: none !important;
  }
}
.visible-print {
  display: none !important;
}
@media print {
  .visible-print {
    display: block !important;
  }
  table.visible-print {
    display: table !important;
  }
  tr.visible-print {
    display: table-row !important;
  }
  th.visible-print,
  td.visible-print {
    display: table-cell !important;
  }
}
.visible-print-block {
  display: none !important;
}
@media print {
  .visible-print-block {
    display: block !important;
  }
}
.visible-print-inline {
  display: none !important;
}
@media print {
  .visible-print-inline {
    display: inline !important;
  }
}
.visible-print-inline-block {
  display: none !important;
}
@media print {
  .visible-print-inline-block {
    display: inline-block !important;
  }
}
@media print {
  .hidden-print {
    display: none !important;
  }
}
/*!
*
* Font Awesome
*
*/
/*!
 *  Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */
/* FONT PATH
 * -------------------------- */
@font-face {
  font-family: 'FontAwesome';
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}
.fa {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
/* makes the font 33% larger relative to the icon container */
.fa-lg {
  font-size: 1.33333333em;
  line-height: 0.75em;
  vertical-align: -15%;
}
.fa-2x {
  font-size: 2em;
}
.fa-3x {
  font-size: 3em;
}
.fa-4x {
  font-size: 4em;
}
.fa-5x {
  font-size: 5em;
}
.fa-fw {
  width: 1.28571429em;
  text-align: center;
}
.fa-ul {
  padding-left: 0;
  margin-left: 2.14285714em;
  list-style-type: none;
}
.fa-ul > li {
  position: relative;
}
.fa-li {
  position: absolute;
  left: -2.14285714em;
  width: 2.14285714em;
  top: 0.14285714em;
  text-align: center;
}
.fa-li.fa-lg {
  left: -1.85714286em;
}
.fa-border {
  padding: .2em .25em .15em;
  border: solid 0.08em #eee;
  border-radius: .1em;
}
.pull-right {
  float: right;
}
.pull-left {
  float: left;
}
.fa.pull-left {
  margin-right: .3em;
}
.fa.pull-right {
  margin-left: .3em;
}
.fa-spin {
  -webkit-animation: fa-spin 2s infinite linear;
  animation: fa-spin 2s infinite linear;
}
@-webkit-keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
@keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
.fa-rotate-90 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
  -webkit-transform: rotate(90deg);
  -ms-transform: rotate(90deg);
  transform: rotate(90deg);
}
.fa-rotate-180 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}
.fa-rotate-270 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
  -webkit-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  transform: rotate(270deg);
}
.fa-flip-horizontal {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
  -webkit-transform: scale(-1, 1);
  -ms-transform: scale(-1, 1);
  transform: scale(-1, 1);
}
.fa-flip-vertical {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
  -webkit-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  transform: scale(1, -1);
}
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical {
  filter: none;
}
.fa-stack {
  position: relative;
  display: inline-block;
  width: 2em;
  height: 2em;
  line-height: 2em;
  vertical-align: middle;
}
.fa-stack-1x,
.fa-stack-2x {
  position: absolute;
  left: 0;
  width: 100%;
  text-align: center;
}
.fa-stack-1x {
  line-height: inherit;
}
.fa-stack-2x {
  font-size: 2em;
}
.fa-inverse {
  color: #fff;
}
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
   readers do not read off random characters that represent icons */
.fa-glass:before {
  content: "\f000";
}
.fa-music:before {
  content: "\f001";
}
.fa-search:before {
  content: "\f002";
}
.fa-envelope-o:before {
  content: "\f003";
}
.fa-heart:before {
  content: "\f004";
}
.fa-star:before {
  content: "\f005";
}
.fa-star-o:before {
  content: "\f006";
}
.fa-user:before {
  content: "\f007";
}
.fa-film:before {
  content: "\f008";
}
.fa-th-large:before {
  content: "\f009";
}
.fa-th:before {
  content: "\f00a";
}
.fa-th-list:before {
  content: "\f00b";
}
.fa-check:before {
  content: "\f00c";
}
.fa-remove:before,
.fa-close:before,
.fa-times:before {
  content: "\f00d";
}
.fa-search-plus:before {
  content: "\f00e";
}
.fa-search-minus:before {
  content: "\f010";
}
.fa-power-off:before {
  content: "\f011";
}
.fa-signal:before {
  content: "\f012";
}
.fa-gear:before,
.fa-cog:before {
  content: "\f013";
}
.fa-trash-o:before {
  content: "\f014";
}
.fa-home:before {
  content: "\f015";
}
.fa-file-o:before {
  content: "\f016";
}
.fa-clock-o:before {
  content: "\f017";
}
.fa-road:before {
  content: "\f018";
}
.fa-download:before {
  content: "\f019";
}
.fa-arrow-circle-o-down:before {
  content: "\f01a";
}
.fa-arrow-circle-o-up:before {
  content: "\f01b";
}
.fa-inbox:before {
  content: "\f01c";
}
.fa-play-circle-o:before {
  content: "\f01d";
}
.fa-rotate-right:before,
.fa-repeat:before {
  content: "\f01e";
}
.fa-refresh:before {
  content: "\f021";
}
.fa-list-alt:before {
  content: "\f022";
}
.fa-lock:before {
  content: "\f023";
}
.fa-flag:before {
  content: "\f024";
}
.fa-headphones:before {
  content: "\f025";
}
.fa-volume-off:before {
  content: "\f026";
}
.fa-volume-down:before {
  content: "\f027";
}
.fa-volume-up:before {
  content: "\f028";
}
.fa-qrcode:before {
  content: "\f029";
}
.fa-barcode:before {
  content: "\f02a";
}
.fa-tag:before {
  content: "\f02b";
}
.fa-tags:before {
  content: "\f02c";
}
.fa-book:before {
  content: "\f02d";
}
.fa-bookmark:before {
  content: "\f02e";
}
.fa-print:before {
  content: "\f02f";
}
.fa-camera:before {
  content: "\f030";
}
.fa-font:before {
  content: "\f031";
}
.fa-bold:before {
  content: "\f032";
}
.fa-italic:before {
  content: "\f033";
}
.fa-text-height:before {
  content: "\f034";
}
.fa-text-width:before {
  content: "\f035";
}
.fa-align-left:before {
  content: "\f036";
}
.fa-align-center:before {
  content: "\f037";
}
.fa-align-right:before {
  content: "\f038";
}
.fa-align-justify:before {
  content: "\f039";
}
.fa-list:before {
  content: "\f03a";
}
.fa-dedent:before,
.fa-outdent:before {
  content: "\f03b";
}
.fa-indent:before {
  content: "\f03c";
}
.fa-video-camera:before {
  content: "\f03d";
}
.fa-photo:before,
.fa-image:before,
.fa-picture-o:before {
  content: "\f03e";
}
.fa-pencil:before {
  content: "\f040";
}
.fa-map-marker:before {
  content: "\f041";
}
.fa-adjust:before {
  content: "\f042";
}
.fa-tint:before {
  content: "\f043";
}
.fa-edit:before,
.fa-pencil-square-o:before {
  content: "\f044";
}
.fa-share-square-o:before {
  content: "\f045";
}
.fa-check-square-o:before {
  content: "\f046";
}
.fa-arrows:before {
  content: "\f047";
}
.fa-step-backward:before {
  content: "\f048";
}
.fa-fast-backward:before {
  content: "\f049";
}
.fa-backward:before {
  content: "\f04a";
}
.fa-play:before {
  content: "\f04b";
}
.fa-pause:before {
  content: "\f04c";
}
.fa-stop:before {
  content: "\f04d";
}
.fa-forward:before {
  content: "\f04e";
}
.fa-fast-forward:before {
  content: "\f050";
}
.fa-step-forward:before {
  content: "\f051";
}
.fa-eject:before {
  content: "\f052";
}
.fa-chevron-left:before {
  content: "\f053";
}
.fa-chevron-right:before {
  content: "\f054";
}
.fa-plus-circle:before {
  content: "\f055";
}
.fa-minus-circle:before {
  content: "\f056";
}
.fa-times-circle:before {
  content: "\f057";
}
.fa-check-circle:before {
  content: "\f058";
}
.fa-question-circle:before {
  content: "\f059";
}
.fa-info-circle:before {
  content: "\f05a";
}
.fa-crosshairs:before {
  content: "\f05b";
}
.fa-times-circle-o:before {
  content: "\f05c";
}
.fa-check-circle-o:before {
  content: "\f05d";
}
.fa-ban:before {
  content: "\f05e";
}
.fa-arrow-left:before {
  content: "\f060";
}
.fa-arrow-right:before {
  content: "\f061";
}
.fa-arrow-up:before {
  content: "\f062";
}
.fa-arrow-down:before {
  content: "\f063";
}
.fa-mail-forward:before,
.fa-share:before {
  content: "\f064";
}
.fa-expand:before {
  content: "\f065";
}
.fa-compress:before {
  content: "\f066";
}
.fa-plus:before {
  content: "\f067";
}
.fa-minus:before {
  content: "\f068";
}
.fa-asterisk:before {
  content: "\f069";
}
.fa-exclamation-circle:before {
  content: "\f06a";
}
.fa-gift:before {
  content: "\f06b";
}
.fa-leaf:before {
  content: "\f06c";
}
.fa-fire:before {
  content: "\f06d";
}
.fa-eye:before {
  content: "\f06e";
}
.fa-eye-slash:before {
  content: "\f070";
}
.fa-warning:before,
.fa-exclamation-triangle:before {
  content: "\f071";
}
.fa-plane:before {
  content: "\f072";
}
.fa-calendar:before {
  content: "\f073";
}
.fa-random:before {
  content: "\f074";
}
.fa-comment:before {
  content: "\f075";
}
.fa-magnet:before {
  content: "\f076";
}
.fa-chevron-up:before {
  content: "\f077";
}
.fa-chevron-down:before {
  content: "\f078";
}
.fa-retweet:before {
  content: "\f079";
}
.fa-shopping-cart:before {
  content: "\f07a";
}
.fa-folder:before {
  content: "\f07b";
}
.fa-folder-open:before {
  content: "\f07c";
}
.fa-arrows-v:before {
  content: "\f07d";
}
.fa-arrows-h:before {
  content: "\f07e";
}
.fa-bar-chart-o:before,
.fa-bar-chart:before {
  content: "\f080";
}
.fa-twitter-square:before {
  content: "\f081";
}
.fa-facebook-square:before {
  content: "\f082";
}
.fa-camera-retro:before {
  content: "\f083";
}
.fa-key:before {
  content: "\f084";
}
.fa-gears:before,
.fa-cogs:before {
  content: "\f085";
}
.fa-comments:before {
  content: "\f086";
}
.fa-thumbs-o-up:before {
  content: "\f087";
}
.fa-thumbs-o-down:before {
  content: "\f088";
}
.fa-star-half:before {
  content: "\f089";
}
.fa-heart-o:before {
  content: "\f08a";
}
.fa-sign-out:before {
  content: "\f08b";
}
.fa-linkedin-square:before {
  content: "\f08c";
}
.fa-thumb-tack:before {
  content: "\f08d";
}
.fa-external-link:before {
  content: "\f08e";
}
.fa-sign-in:before {
  content: "\f090";
}
.fa-trophy:before {
  content: "\f091";
}
.fa-github-square:before {
  content: "\f092";
}
.fa-upload:before {
  content: "\f093";
}
.fa-lemon-o:before {
  content: "\f094";
}
.fa-phone:before {
  content: "\f095";
}
.fa-square-o:before {
  content: "\f096";
}
.fa-bookmark-o:before {
  content: "\f097";
}
.fa-phone-square:before {
  content: "\f098";
}
.fa-twitter:before {
  content: "\f099";
}
.fa-facebook:before {
  content: "\f09a";
}
.fa-github:before {
  content: "\f09b";
}
.fa-unlock:before {
  content: "\f09c";
}
.fa-credit-card:before {
  content: "\f09d";
}
.fa-rss:before {
  content: "\f09e";
}
.fa-hdd-o:before {
  content: "\f0a0";
}
.fa-bullhorn:before {
  content: "\f0a1";
}
.fa-bell:before {
  content: "\f0f3";
}
.fa-certificate:before {
  content: "\f0a3";
}
.fa-hand-o-right:before {
  content: "\f0a4";
}
.fa-hand-o-left:before {
  content: "\f0a5";
}
.fa-hand-o-up:before {
  content: "\f0a6";
}
.fa-hand-o-down:before {
  content: "\f0a7";
}
.fa-arrow-circle-left:before {
  content: "\f0a8";
}
.fa-arrow-circle-right:before {
  content: "\f0a9";
}
.fa-arrow-circle-up:before {
  content: "\f0aa";
}
.fa-arrow-circle-down:before {
  content: "\f0ab";
}
.fa-globe:before {
  content: "\f0ac";
}
.fa-wrench:before {
  content: "\f0ad";
}
.fa-tasks:before {
  content: "\f0ae";
}
.fa-filter:before {
  content: "\f0b0";
}
.fa-briefcase:before {
  content: "\f0b1";
}
.fa-arrows-alt:before {
  content: "\f0b2";
}
.fa-group:before,
.fa-users:before {
  content: "\f0c0";
}
.fa-chain:before,
.fa-link:before {
  content: "\f0c1";
}
.fa-cloud:before {
  content: "\f0c2";
}
.fa-flask:before {
  content: "\f0c3";
}
.fa-cut:before,
.fa-scissors:before {
  content: "\f0c4";
}
.fa-copy:before,
.fa-files-o:before {
  content: "\f0c5";
}
.fa-paperclip:before {
  content: "\f0c6";
}
.fa-save:before,
.fa-floppy-o:before {
  content: "\f0c7";
}
.fa-square:before {
  content: "\f0c8";
}
.fa-navicon:before,
.fa-reorder:before,
.fa-bars:before {
  content: "\f0c9";
}
.fa-list-ul:before {
  content: "\f0ca";
}
.fa-list-ol:before {
  content: "\f0cb";
}
.fa-strikethrough:before {
  content: "\f0cc";
}
.fa-underline:before {
  content: "\f0cd";
}
.fa-table:before {
  content: "\f0ce";
}
.fa-magic:before {
  content: "\f0d0";
}
.fa-truck:before {
  content: "\f0d1";
}
.fa-pinterest:before {
  content: "\f0d2";
}
.fa-pinterest-square:before {
  content: "\f0d3";
}
.fa-google-plus-square:before {
  content: "\f0d4";
}
.fa-google-plus:before {
  content: "\f0d5";
}
.fa-money:before {
  content: "\f0d6";
}
.fa-caret-down:before {
  content: "\f0d7";
}
.fa-caret-up:before {
  content: "\f0d8";
}
.fa-caret-left:before {
  content: "\f0d9";
}
.fa-caret-right:before {
  content: "\f0da";
}
.fa-columns:before {
  content: "\f0db";
}
.fa-unsorted:before,
.fa-sort:before {
  content: "\f0dc";
}
.fa-sort-down:before,
.fa-sort-desc:before {
  content: "\f0dd";
}
.fa-sort-up:before,
.fa-sort-asc:before {
  content: "\f0de";
}
.fa-envelope:before {
  content: "\f0e0";
}
.fa-linkedin:before {
  content: "\f0e1";
}
.fa-rotate-left:before,
.fa-undo:before {
  content: "\f0e2";
}
.fa-legal:before,
.fa-gavel:before {
  content: "\f0e3";
}
.fa-dashboard:before,
.fa-tachometer:before {
  content: "\f0e4";
}
.fa-comment-o:before {
  content: "\f0e5";
}
.fa-comments-o:before {
  content: "\f0e6";
}
.fa-flash:before,
.fa-bolt:before {
  content: "\f0e7";
}
.fa-sitemap:before {
  content: "\f0e8";
}
.fa-umbrella:before {
  content: "\f0e9";
}
.fa-paste:before,
.fa-clipboard:before {
  content: "\f0ea";
}
.fa-lightbulb-o:before {
  content: "\f0eb";
}
.fa-exchange:before {
  content: "\f0ec";
}
.fa-cloud-download:before {
  content: "\f0ed";
}
.fa-cloud-upload:before {
  content: "\f0ee";
}
.fa-user-md:before {
  content: "\f0f0";
}
.fa-stethoscope:before {
  content: "\f0f1";
}
.fa-suitcase:before {
  content: "\f0f2";
}
.fa-bell-o:before {
  content: "\f0a2";
}
.fa-coffee:before {
  content: "\f0f4";
}
.fa-cutlery:before {
  content: "\f0f5";
}
.fa-file-text-o:before {
  content: "\f0f6";
}
.fa-building-o:before {
  content: "\f0f7";
}
.fa-hospital-o:before {
  content: "\f0f8";
}
.fa-ambulance:before {
  content: "\f0f9";
}
.fa-medkit:before {
  content: "\f0fa";
}
.fa-fighter-jet:before {
  content: "\f0fb";
}
.fa-beer:before {
  content: "\f0fc";
}
.fa-h-square:before {
  content: "\f0fd";
}
.fa-plus-square:before {
  content: "\f0fe";
}
.fa-angle-double-left:before {
  content: "\f100";
}
.fa-angle-double-right:before {
  content: "\f101";
}
.fa-angle-double-up:before {
  content: "\f102";
}
.fa-angle-double-down:before {
  content: "\f103";
}
.fa-angle-left:before {
  content: "\f104";
}
.fa-angle-right:before {
  content: "\f105";
}
.fa-angle-up:before {
  content: "\f106";
}
.fa-angle-down:before {
  content: "\f107";
}
.fa-desktop:before {
  content: "\f108";
}
.fa-laptop:before {
  content: "\f109";
}
.fa-tablet:before {
  content: "\f10a";
}
.fa-mobile-phone:before,
.fa-mobile:before {
  content: "\f10b";
}
.fa-circle-o:before {
  content: "\f10c";
}
.fa-quote-left:before {
  content: "\f10d";
}
.fa-quote-right:before {
  content: "\f10e";
}
.fa-spinner:before {
  content: "\f110";
}
.fa-circle:before {
  content: "\f111";
}
.fa-mail-reply:before,
.fa-reply:before {
  content: "\f112";
}
.fa-github-alt:before {
  content: "\f113";
}
.fa-folder-o:before {
  content: "\f114";
}
.fa-folder-open-o:before {
  content: "\f115";
}
.fa-smile-o:before {
  content: "\f118";
}
.fa-frown-o:before {
  content: "\f119";
}
.fa-meh-o:before {
  content: "\f11a";
}
.fa-gamepad:before {
  content: "\f11b";
}
.fa-keyboard-o:before {
  content: "\f11c";
}
.fa-flag-o:before {
  content: "\f11d";
}
.fa-flag-checkered:before {
  content: "\f11e";
}
.fa-terminal:before {
  content: "\f120";
}
.fa-code:before {
  content: "\f121";
}
.fa-mail-reply-all:before,
.fa-reply-all:before {
  content: "\f122";
}
.fa-star-half-empty:before,
.fa-star-half-full:before,
.fa-star-half-o:before {
  content: "\f123";
}
.fa-location-arrow:before {
  content: "\f124";
}
.fa-crop:before {
  content: "\f125";
}
.fa-code-fork:before {
  content: "\f126";
}
.fa-unlink:before,
.fa-chain-broken:before {
  content: "\f127";
}
.fa-question:before {
  content: "\f128";
}
.fa-info:before {
  content: "\f129";
}
.fa-exclamation:before {
  content: "\f12a";
}
.fa-superscript:before {
  content: "\f12b";
}
.fa-subscript:before {
  content: "\f12c";
}
.fa-eraser:before {
  content: "\f12d";
}
.fa-puzzle-piece:before {
  content: "\f12e";
}
.fa-microphone:before {
  content: "\f130";
}
.fa-microphone-slash:before {
  content: "\f131";
}
.fa-shield:before {
  content: "\f132";
}
.fa-calendar-o:before {
  content: "\f133";
}
.fa-fire-extinguisher:before {
  content: "\f134";
}
.fa-rocket:before {
  content: "\f135";
}
.fa-maxcdn:before {
  content: "\f136";
}
.fa-chevron-circle-left:before {
  content: "\f137";
}
.fa-chevron-circle-right:before {
  content: "\f138";
}
.fa-chevron-circle-up:before {
  content: "\f139";
}
.fa-chevron-circle-down:before {
  content: "\f13a";
}
.fa-html5:before {
  content: "\f13b";
}
.fa-css3:before {
  content: "\f13c";
}
.fa-anchor:before {
  content: "\f13d";
}
.fa-unlock-alt:before {
  content: "\f13e";
}
.fa-bullseye:before {
  content: "\f140";
}
.fa-ellipsis-h:before {
  content: "\f141";
}
.fa-ellipsis-v:before {
  content: "\f142";
}
.fa-rss-square:before {
  content: "\f143";
}
.fa-play-circle:before {
  content: "\f144";
}
.fa-ticket:before {
  content: "\f145";
}
.fa-minus-square:before {
  content: "\f146";
}
.fa-minus-square-o:before {
  content: "\f147";
}
.fa-level-up:before {
  content: "\f148";
}
.fa-level-down:before {
  content: "\f149";
}
.fa-check-square:before {
  content: "\f14a";
}
.fa-pencil-square:before {
  content: "\f14b";
}
.fa-external-link-square:before {
  content: "\f14c";
}
.fa-share-square:before {
  content: "\f14d";
}
.fa-compass:before {
  content: "\f14e";
}
.fa-toggle-down:before,
.fa-caret-square-o-down:before {
  content: "\f150";
}
.fa-toggle-up:before,
.fa-caret-square-o-up:before {
  content: "\f151";
}
.fa-toggle-right:before,
.fa-caret-square-o-right:before {
  content: "\f152";
}
.fa-euro:before,
.fa-eur:before {
  content: "\f153";
}
.fa-gbp:before {
  content: "\f154";
}
.fa-dollar:before,
.fa-usd:before {
  content: "\f155";
}
.fa-rupee:before,
.fa-inr:before {
  content: "\f156";
}
.fa-cny:before,
.fa-rmb:before,
.fa-yen:before,
.fa-jpy:before {
  content: "\f157";
}
.fa-ruble:before,
.fa-rouble:before,
.fa-rub:before {
  content: "\f158";
}
.fa-won:before,
.fa-krw:before {
  content: "\f159";
}
.fa-bitcoin:before,
.fa-btc:before {
  content: "\f15a";
}
.fa-file:before {
  content: "\f15b";
}
.fa-file-text:before {
  content: "\f15c";
}
.fa-sort-alpha-asc:before {
  content: "\f15d";
}
.fa-sort-alpha-desc:before {
  content: "\f15e";
}
.fa-sort-amount-asc:before {
  content: "\f160";
}
.fa-sort-amount-desc:before {
  content: "\f161";
}
.fa-sort-numeric-asc:before {
  content: "\f162";
}
.fa-sort-numeric-desc:before {
  content: "\f163";
}
.fa-thumbs-up:before {
  content: "\f164";
}
.fa-thumbs-down:before {
  content: "\f165";
}
.fa-youtube-square:before {
  content: "\f166";
}
.fa-youtube:before {
  content: "\f167";
}
.fa-xing:before {
  content: "\f168";
}
.fa-xing-square:before {
  content: "\f169";
}
.fa-youtube-play:before {
  content: "\f16a";
}
.fa-dropbox:before {
  content: "\f16b";
}
.fa-stack-overflow:before {
  content: "\f16c";
}
.fa-instagram:before {
  content: "\f16d";
}
.fa-flickr:before {
  content: "\f16e";
}
.fa-adn:before {
  content: "\f170";
}
.fa-bitbucket:before {
  content: "\f171";
}
.fa-bitbucket-square:before {
  content: "\f172";
}
.fa-tumblr:before {
  content: "\f173";
}
.fa-tumblr-square:before {
  content: "\f174";
}
.fa-long-arrow-down:before {
  content: "\f175";
}
.fa-long-arrow-up:before {
  content: "\f176";
}
.fa-long-arrow-left:before {
  content: "\f177";
}
.fa-long-arrow-right:before {
  content: "\f178";
}
.fa-apple:before {
  content: "\f179";
}
.fa-windows:before {
  content: "\f17a";
}
.fa-android:before {
  content: "\f17b";
}
.fa-linux:before {
  content: "\f17c";
}
.fa-dribbble:before {
  content: "\f17d";
}
.fa-skype:before {
  content: "\f17e";
}
.fa-foursquare:before {
  content: "\f180";
}
.fa-trello:before {
  content: "\f181";
}
.fa-female:before {
  content: "\f182";
}
.fa-male:before {
  content: "\f183";
}
.fa-gittip:before {
  content: "\f184";
}
.fa-sun-o:before {
  content: "\f185";
}
.fa-moon-o:before {
  content: "\f186";
}
.fa-archive:before {
  content: "\f187";
}
.fa-bug:before {
  content: "\f188";
}
.fa-vk:before {
  content: "\f189";
}
.fa-weibo:before {
  content: "\f18a";
}
.fa-renren:before {
  content: "\f18b";
}
.fa-pagelines:before {
  content: "\f18c";
}
.fa-stack-exchange:before {
  content: "\f18d";
}
.fa-arrow-circle-o-right:before {
  content: "\f18e";
}
.fa-arrow-circle-o-left:before {
  content: "\f190";
}
.fa-toggle-left:before,
.fa-caret-square-o-left:before {
  content: "\f191";
}
.fa-dot-circle-o:before {
  content: "\f192";
}
.fa-wheelchair:before {
  content: "\f193";
}
.fa-vimeo-square:before {
  content: "\f194";
}
.fa-turkish-lira:before,
.fa-try:before {
  content: "\f195";
}
.fa-plus-square-o:before {
  content: "\f196";
}
.fa-space-shuttle:before {
  content: "\f197";
}
.fa-slack:before {
  content: "\f198";
}
.fa-envelope-square:before {
  content: "\f199";
}
.fa-wordpress:before {
  content: "\f19a";
}
.fa-openid:before {
  content: "\f19b";
}
.fa-institution:before,
.fa-bank:before,
.fa-university:before {
  content: "\f19c";
}
.fa-mortar-board:before,
.fa-graduation-cap:before {
  content: "\f19d";
}
.fa-yahoo:before {
  content: "\f19e";
}
.fa-google:before {
  content: "\f1a0";
}
.fa-reddit:before {
  content: "\f1a1";
}
.fa-reddit-square:before {
  content: "\f1a2";
}
.fa-stumbleupon-circle:before {
  content: "\f1a3";
}
.fa-stumbleupon:before {
  content: "\f1a4";
}
.fa-delicious:before {
  content: "\f1a5";
}
.fa-digg:before {
  content: "\f1a6";
}
.fa-pied-piper:before {
  content: "\f1a7";
}
.fa-pied-piper-alt:before {
  content: "\f1a8";
}
.fa-drupal:before {
  content: "\f1a9";
}
.fa-joomla:before {
  content: "\f1aa";
}
.fa-language:before {
  content: "\f1ab";
}
.fa-fax:before {
  content: "\f1ac";
}
.fa-building:before {
  content: "\f1ad";
}
.fa-child:before {
  content: "\f1ae";
}
.fa-paw:before {
  content: "\f1b0";
}
.fa-spoon:before {
  content: "\f1b1";
}
.fa-cube:before {
  content: "\f1b2";
}
.fa-cubes:before {
  content: "\f1b3";
}
.fa-behance:before {
  content: "\f1b4";
}
.fa-behance-square:before {
  content: "\f1b5";
}
.fa-steam:before {
  content: "\f1b6";
}
.fa-steam-square:before {
  content: "\f1b7";
}
.fa-recycle:before {
  content: "\f1b8";
}
.fa-automobile:before,
.fa-car:before {
  content: "\f1b9";
}
.fa-cab:before,
.fa-taxi:before {
  content: "\f1ba";
}
.fa-tree:before {
  content: "\f1bb";
}
.fa-spotify:before {
  content: "\f1bc";
}
.fa-deviantart:before {
  content: "\f1bd";
}
.fa-soundcloud:before {
  content: "\f1be";
}
.fa-database:before {
  content: "\f1c0";
}
.fa-file-pdf-o:before {
  content: "\f1c1";
}
.fa-file-word-o:before {
  content: "\f1c2";
}
.fa-file-excel-o:before {
  content: "\f1c3";
}
.fa-file-powerpoint-o:before {
  content: "\f1c4";
}
.fa-file-photo-o:before,
.fa-file-picture-o:before,
.fa-file-image-o:before {
  content: "\f1c5";
}
.fa-file-zip-o:before,
.fa-file-archive-o:before {
  content: "\f1c6";
}
.fa-file-sound-o:before,
.fa-file-audio-o:before {
  content: "\f1c7";
}
.fa-file-movie-o:before,
.fa-file-video-o:before {
  content: "\f1c8";
}
.fa-file-code-o:before {
  content: "\f1c9";
}
.fa-vine:before {
  content: "\f1ca";
}
.fa-codepen:before {
  content: "\f1cb";
}
.fa-jsfiddle:before {
  content: "\f1cc";
}
.fa-life-bouy:before,
.fa-life-buoy:before,
.fa-life-saver:before,
.fa-support:before,
.fa-life-ring:before {
  content: "\f1cd";
}
.fa-circle-o-notch:before {
  content: "\f1ce";
}
.fa-ra:before,
.fa-rebel:before {
  content: "\f1d0";
}
.fa-ge:before,
.fa-empire:before {
  content: "\f1d1";
}
.fa-git-square:before {
  content: "\f1d2";
}
.fa-git:before {
  content: "\f1d3";
}
.fa-hacker-news:before {
  content: "\f1d4";
}
.fa-tencent-weibo:before {
  content: "\f1d5";
}
.fa-qq:before {
  content: "\f1d6";
}
.fa-wechat:before,
.fa-weixin:before {
  content: "\f1d7";
}
.fa-send:before,
.fa-paper-plane:before {
  content: "\f1d8";
}
.fa-send-o:before,
.fa-paper-plane-o:before {
  content: "\f1d9";
}
.fa-history:before {
  content: "\f1da";
}
.fa-circle-thin:before {
  content: "\f1db";
}
.fa-header:before {
  content: "\f1dc";
}
.fa-paragraph:before {
  content: "\f1dd";
}
.fa-sliders:before {
  content: "\f1de";
}
.fa-share-alt:before {
  content: "\f1e0";
}
.fa-share-alt-square:before {
  content: "\f1e1";
}
.fa-bomb:before {
  content: "\f1e2";
}
.fa-soccer-ball-o:before,
.fa-futbol-o:before {
  content: "\f1e3";
}
.fa-tty:before {
  content: "\f1e4";
}
.fa-binoculars:before {
  content: "\f1e5";
}
.fa-plug:before {
  content: "\f1e6";
}
.fa-slideshare:before {
  content: "\f1e7";
}
.fa-twitch:before {
  content: "\f1e8";
}
.fa-yelp:before {
  content: "\f1e9";
}
.fa-newspaper-o:before {
  content: "\f1ea";
}
.fa-wifi:before {
  content: "\f1eb";
}
.fa-calculator:before {
  content: "\f1ec";
}
.fa-paypal:before {
  content: "\f1ed";
}
.fa-google-wallet:before {
  content: "\f1ee";
}
.fa-cc-visa:before {
  content: "\f1f0";
}
.fa-cc-mastercard:before {
  content: "\f1f1";
}
.fa-cc-discover:before {
  content: "\f1f2";
}
.fa-cc-amex:before {
  content: "\f1f3";
}
.fa-cc-paypal:before {
  content: "\f1f4";
}
.fa-cc-stripe:before {
  content: "\f1f5";
}
.fa-bell-slash:before {
  content: "\f1f6";
}
.fa-bell-slash-o:before {
  content: "\f1f7";
}
.fa-trash:before {
  content: "\f1f8";
}
.fa-copyright:before {
  content: "\f1f9";
}
.fa-at:before {
  content: "\f1fa";
}
.fa-eyedropper:before {
  content: "\f1fb";
}
.fa-paint-brush:before {
  content: "\f1fc";
}
.fa-birthday-cake:before {
  content: "\f1fd";
}
.fa-area-chart:before {
  content: "\f1fe";
}
.fa-pie-chart:before {
  content: "\f200";
}
.fa-line-chart:before {
  content: "\f201";
}
.fa-lastfm:before {
  content: "\f202";
}
.fa-lastfm-square:before {
  content: "\f203";
}
.fa-toggle-off:before {
  content: "\f204";
}
.fa-toggle-on:before {
  content: "\f205";
}
.fa-bicycle:before {
  content: "\f206";
}
.fa-bus:before {
  content: "\f207";
}
.fa-ioxhost:before {
  content: "\f208";
}
.fa-angellist:before {
  content: "\f209";
}
.fa-cc:before {
  content: "\f20a";
}
.fa-shekel:before,
.fa-sheqel:before,
.fa-ils:before {
  content: "\f20b";
}
.fa-meanpath:before {
  content: "\f20c";
}
/*!
*
* IPython base
*
*/
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
code {
  color: #000;
}
pre {
  font-size: inherit;
  line-height: inherit;
}
label {
  font-weight: normal;
}
/* Make the page background atleast 100% the height of the view port */
/* Make the page itself atleast 70% the height of the view port */
.border-box-sizing {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.corner-all {
  border-radius: 2px;
}
.no-padding {
  padding: 0px;
}
/* Flexible box model classes */
/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
/* This file is a compatability layer.  It allows the usage of flexible box 
model layouts accross multiple browsers, including older browsers.  The newest,
universal implementation of the flexible box model is used when available (see
`Modern browsers` comments below).  Browsers that are known to implement this 
new spec completely include:

    Firefox 28.0+
    Chrome 29.0+
    Internet Explorer 11+ 
    Opera 17.0+

Browsers not listed, including Safari, are supported via the styling under the
`Old browsers` comments below.
*/
.hbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
.hbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.vbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
.vbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.hbox.reverse,
.vbox.reverse,
.reverse {
  /* Old browsers */
  -webkit-box-direction: reverse;
  -moz-box-direction: reverse;
  box-direction: reverse;
  /* Modern browsers */
  flex-direction: row-reverse;
}
.hbox.box-flex0,
.vbox.box-flex0,
.box-flex0 {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
  width: auto;
}
.hbox.box-flex1,
.vbox.box-flex1,
.box-flex1 {
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex,
.vbox.box-flex,
.box-flex {
  /* Old browsers */
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex2,
.vbox.box-flex2,
.box-flex2 {
  /* Old browsers */
  -webkit-box-flex: 2;
  -moz-box-flex: 2;
  box-flex: 2;
  /* Modern browsers */
  flex: 2;
}
.box-group1 {
  /*  Deprecated */
  -webkit-box-flex-group: 1;
  -moz-box-flex-group: 1;
  box-flex-group: 1;
}
.box-group2 {
  /* Deprecated */
  -webkit-box-flex-group: 2;
  -moz-box-flex-group: 2;
  box-flex-group: 2;
}
.hbox.start,
.vbox.start,
.start {
  /* Old browsers */
  -webkit-box-pack: start;
  -moz-box-pack: start;
  box-pack: start;
  /* Modern browsers */
  justify-content: flex-start;
}
.hbox.end,
.vbox.end,
.end {
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
}
.hbox.center,
.vbox.center,
.center {
  /* Old browsers */
  -webkit-box-pack: center;
  -moz-box-pack: center;
  box-pack: center;
  /* Modern browsers */
  justify-content: center;
}
.hbox.baseline,
.vbox.baseline,
.baseline {
  /* Old browsers */
  -webkit-box-pack: baseline;
  -moz-box-pack: baseline;
  box-pack: baseline;
  /* Modern browsers */
  justify-content: baseline;
}
.hbox.stretch,
.vbox.stretch,
.stretch {
  /* Old browsers */
  -webkit-box-pack: stretch;
  -moz-box-pack: stretch;
  box-pack: stretch;
  /* Modern browsers */
  justify-content: stretch;
}
.hbox.align-start,
.vbox.align-start,
.align-start {
  /* Old browsers */
  -webkit-box-align: start;
  -moz-box-align: start;
  box-align: start;
  /* Modern browsers */
  align-items: flex-start;
}
.hbox.align-end,
.vbox.align-end,
.align-end {
  /* Old browsers */
  -webkit-box-align: end;
  -moz-box-align: end;
  box-align: end;
  /* Modern browsers */
  align-items: flex-end;
}
.hbox.align-center,
.vbox.align-center,
.align-center {
  /* Old browsers */
  -webkit-box-align: center;
  -moz-box-align: center;
  box-align: center;
  /* Modern browsers */
  align-items: center;
}
.hbox.align-baseline,
.vbox.align-baseline,
.align-baseline {
  /* Old browsers */
  -webkit-box-align: baseline;
  -moz-box-align: baseline;
  box-align: baseline;
  /* Modern browsers */
  align-items: baseline;
}
.hbox.align-stretch,
.vbox.align-stretch,
.align-stretch {
  /* Old browsers */
  -webkit-box-align: stretch;
  -moz-box-align: stretch;
  box-align: stretch;
  /* Modern browsers */
  align-items: stretch;
}
div.error {
  margin: 2em;
  text-align: center;
}
div.error > h1 {
  font-size: 500%;
  line-height: normal;
}
div.error > p {
  font-size: 200%;
  line-height: normal;
}
div.traceback-wrapper {
  text-align: left;
  max-width: 800px;
  margin: auto;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
body {
  background-color: #fff;
  /* This makes sure that the body covers the entire window and needs to
       be in a different element than the display: box in wrapper below */
  position: absolute;
  left: 0px;
  right: 0px;
  top: 0px;
  bottom: 0px;
  overflow: visible;
}
body > #header {
  /* Initially hidden to prevent FLOUC */
  display: none;
  background-color: #fff;
  /* Display over codemirror */
  position: relative;
  z-index: 100;
}
body > #header #header-container {
  padding-bottom: 5px;
  padding-top: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
body > #header .header-bar {
  width: 100%;
  height: 1px;
  background: #e7e7e7;
  margin-bottom: -1px;
}
@media print {
  body > #header {
    display: none !important;
  }
}
#header-spacer {
  width: 100%;
  visibility: hidden;
}
@media print {
  #header-spacer {
    display: none;
  }
}
#ipython_notebook {
  padding-left: 0px;
  padding-top: 1px;
  padding-bottom: 1px;
}
@media (max-width: 991px) {
  #ipython_notebook {
    margin-left: 10px;
  }
}
[dir="rtl"] #ipython_notebook {
  float: right !important;
}
#noscript {
  width: auto;
  padding-top: 16px;
  padding-bottom: 16px;
  text-align: center;
  font-size: 22px;
  color: red;
  font-weight: bold;
}
#ipython_notebook img {
  height: 28px;
}
#site {
  width: 100%;
  display: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  overflow: auto;
}
@media print {
  #site {
    height: auto !important;
  }
}
/* Smaller buttons */
.ui-button .ui-button-text {
  padding: 0.2em 0.8em;
  font-size: 77%;
}
input.ui-button {
  padding: 0.3em 0.9em;
}
span#login_widget {
  float: right;
}
span#login_widget > .button,
#logout {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button:focus,
#logout:focus,
span#login_widget > .button.focus,
#logout.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
span#login_widget > .button:hover,
#logout:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active:hover,
#logout:active:hover,
span#login_widget > .button.active:hover,
#logout.active:hover,
.open > .dropdown-togglespan#login_widget > .button:hover,
.open > .dropdown-toggle#logout:hover,
span#login_widget > .button:active:focus,
#logout:active:focus,
span#login_widget > .button.active:focus,
#logout.active:focus,
.open > .dropdown-togglespan#login_widget > .button:focus,
.open > .dropdown-toggle#logout:focus,
span#login_widget > .button:active.focus,
#logout:active.focus,
span#login_widget > .button.active.focus,
#logout.active.focus,
.open > .dropdown-togglespan#login_widget > .button.focus,
.open > .dropdown-toggle#logout.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  background-image: none;
}
span#login_widget > .button.disabled:hover,
#logout.disabled:hover,
span#login_widget > .button[disabled]:hover,
#logout[disabled]:hover,
fieldset[disabled] span#login_widget > .button:hover,
fieldset[disabled] #logout:hover,
span#login_widget > .button.disabled:focus,
#logout.disabled:focus,
span#login_widget > .button[disabled]:focus,
#logout[disabled]:focus,
fieldset[disabled] span#login_widget > .button:focus,
fieldset[disabled] #logout:focus,
span#login_widget > .button.disabled.focus,
#logout.disabled.focus,
span#login_widget > .button[disabled].focus,
#logout[disabled].focus,
fieldset[disabled] span#login_widget > .button.focus,
fieldset[disabled] #logout.focus {
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button .badge,
#logout .badge {
  color: #fff;
  background-color: #333;
}
.nav-header {
  text-transform: none;
}
#header > span {
  margin-top: 10px;
}
.modal_stretch .modal-dialog {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  min-height: 80vh;
}
.modal_stretch .modal-dialog .modal-body {
  max-height: calc(100vh - 200px);
  overflow: auto;
  flex: 1;
}
@media (min-width: 768px) {
  .modal .modal-dialog {
    width: 700px;
  }
}
@media (min-width: 768px) {
  select.form-control {
    margin-left: 12px;
    margin-right: 12px;
  }
}
/*!
*
* IPython auth
*
*/
.center-nav {
  display: inline-block;
  margin-bottom: -4px;
}
/*!
*
* IPython tree view
*
*/
/* We need an invisible input field on top of the sentense*/
/* "Drag file onto the list ..." */
.alternate_upload {
  background-color: none;
  display: inline;
}
.alternate_upload.form {
  padding: 0;
  margin: 0;
}
.alternate_upload input.fileinput {
  text-align: center;
  vertical-align: middle;
  display: inline;
  opacity: 0;
  z-index: 2;
  width: 12ex;
  margin-right: -12ex;
}
.alternate_upload .btn-upload {
  height: 22px;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
[dir="rtl"] #tabs li {
  float: right;
}
ul#tabs {
  margin-bottom: 4px;
}
[dir="rtl"] ul#tabs {
  margin-right: 0px;
}
ul#tabs a {
  padding-top: 6px;
  padding-bottom: 4px;
}
ul.breadcrumb a:focus,
ul.breadcrumb a:hover {
  text-decoration: none;
}
ul.breadcrumb i.icon-home {
  font-size: 16px;
  margin-right: 4px;
}
ul.breadcrumb span {
  color: #5e5e5e;
}
.list_toolbar {
  padding: 4px 0 4px 0;
  vertical-align: middle;
}
.list_toolbar .tree-buttons {
  padding-top: 1px;
}
[dir="rtl"] .list_toolbar .tree-buttons {
  float: left !important;
}
[dir="rtl"] .list_toolbar .pull-right {
  padding-top: 1px;
  float: left !important;
}
[dir="rtl"] .list_toolbar .pull-left {
  float: right !important;
}
.dynamic-buttons {
  padding-top: 3px;
  display: inline-block;
}
.list_toolbar [class*="span"] {
  min-height: 24px;
}
.list_header {
  font-weight: bold;
  background-color: #EEE;
}
.list_placeholder {
  font-weight: bold;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
}
.list_container {
  margin-top: 4px;
  margin-bottom: 20px;
  border: 1px solid #ddd;
  border-radius: 2px;
}
.list_container > div {
  border-bottom: 1px solid #ddd;
}
.list_container > div:hover .list-item {
  background-color: red;
}
.list_container > div:last-child {
  border: none;
}
.list_item:hover .list_item {
  background-color: #ddd;
}
.list_item a {
  text-decoration: none;
}
.list_item:hover {
  background-color: #fafafa;
}
.list_header > div,
.list_item > div {
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
.list_header > div input,
.list_item > div input {
  margin-right: 7px;
  margin-left: 14px;
  vertical-align: baseline;
  line-height: 22px;
  position: relative;
  top: -1px;
}
.list_header > div .item_link,
.list_item > div .item_link {
  margin-left: -1px;
  vertical-align: baseline;
  line-height: 22px;
}
.new-file input[type=checkbox] {
  visibility: hidden;
}
.item_name {
  line-height: 22px;
  height: 24px;
}
.item_icon {
  font-size: 14px;
  color: #5e5e5e;
  margin-right: 7px;
  margin-left: 7px;
  line-height: 22px;
  vertical-align: baseline;
}
.item_buttons {
  line-height: 1em;
  margin-left: -5px;
}
.item_buttons .btn,
.item_buttons .btn-group,
.item_buttons .input-group {
  float: left;
}
.item_buttons > .btn,
.item_buttons > .btn-group,
.item_buttons > .input-group {
  margin-left: 5px;
}
.item_buttons .btn {
  min-width: 13ex;
}
.item_buttons .running-indicator {
  padding-top: 4px;
  color: #5cb85c;
}
.item_buttons .kernel-name {
  padding-top: 4px;
  color: #5bc0de;
  margin-right: 7px;
  float: left;
}
.toolbar_info {
  height: 24px;
  line-height: 24px;
}
.list_item input:not([type=checkbox]) {
  padding-top: 3px;
  padding-bottom: 3px;
  height: 22px;
  line-height: 14px;
  margin: 0px;
}
.highlight_text {
  color: blue;
}
#project_name {
  display: inline-block;
  padding-left: 7px;
  margin-left: -2px;
}
#project_name > .breadcrumb {
  padding: 0px;
  margin-bottom: 0px;
  background-color: transparent;
  font-weight: bold;
}
#tree-selector {
  padding-right: 0px;
}
[dir="rtl"] #tree-selector a {
  float: right;
}
#button-select-all {
  min-width: 50px;
}
#select-all {
  margin-left: 7px;
  margin-right: 2px;
}
.menu_icon {
  margin-right: 2px;
}
.tab-content .row {
  margin-left: 0px;
  margin-right: 0px;
}
.folder_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f114";
}
.folder_icon:before.pull-left {
  margin-right: .3em;
}
.folder_icon:before.pull-right {
  margin-left: .3em;
}
.notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
}
.notebook_icon:before.pull-left {
  margin-right: .3em;
}
.notebook_icon:before.pull-right {
  margin-left: .3em;
}
.running_notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
  color: #5cb85c;
}
.running_notebook_icon:before.pull-left {
  margin-right: .3em;
}
.running_notebook_icon:before.pull-right {
  margin-left: .3em;
}
.file_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f016";
  position: relative;
  top: -2px;
}
.file_icon:before.pull-left {
  margin-right: .3em;
}
.file_icon:before.pull-right {
  margin-left: .3em;
}
#notebook_toolbar .pull-right {
  padding-top: 0px;
  margin-right: -1px;
}
ul#new-menu {
  left: auto;
  right: 0;
}
[dir="rtl"] #new-menu {
  text-align: right;
}
.kernel-menu-icon {
  padding-right: 12px;
  width: 24px;
  content: "\f096";
}
.kernel-menu-icon:before {
  content: "\f096";
}
.kernel-menu-icon-current:before {
  content: "\f00c";
}
#tab_content {
  padding-top: 20px;
}
#running .panel-group .panel {
  margin-top: 3px;
  margin-bottom: 1em;
}
#running .panel-group .panel .panel-heading {
  background-color: #EEE;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
#running .panel-group .panel .panel-heading a:focus,
#running .panel-group .panel .panel-heading a:hover {
  text-decoration: none;
}
#running .panel-group .panel .panel-body {
  padding: 0px;
}
#running .panel-group .panel .panel-body .list_container {
  margin-top: 0px;
  margin-bottom: 0px;
  border: 0px;
  border-radius: 0px;
}
#running .panel-group .panel .panel-body .list_container .list_item {
  border-bottom: 1px solid #ddd;
}
#running .panel-group .panel .panel-body .list_container .list_item:last-child {
  border-bottom: 0px;
}
[dir="rtl"] #running .col-sm-8 {
  float: right !important;
}
.delete-button {
  display: none;
}
.duplicate-button {
  display: none;
}
.rename-button {
  display: none;
}
.shutdown-button {
  display: none;
}
.dynamic-instructions {
  display: inline-block;
  padding-top: 4px;
}
/*!
*
* IPython text editor webapp
*
*/
.selected-keymap i.fa {
  padding: 0px 5px;
}
.selected-keymap i.fa:before {
  content: "\f00c";
}
#mode-menu {
  overflow: auto;
  max-height: 20em;
}
.edit_app #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.edit_app #menubar .navbar {
  /* Use a negative 1 bottom margin, so the border overlaps the border of the
    header */
  margin-bottom: -1px;
}
.dirty-indicator {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator.pull-left {
  margin-right: .3em;
}
.dirty-indicator.pull-right {
  margin-left: .3em;
}
.dirty-indicator-dirty {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-dirty.pull-left {
  margin-right: .3em;
}
.dirty-indicator-dirty.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-clean.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f00c";
}
.dirty-indicator-clean:before.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean:before.pull-right {
  margin-left: .3em;
}
#filename {
  font-size: 16pt;
  display: table;
  padding: 0px 5px;
}
#current-mode {
  padding-left: 5px;
  padding-right: 5px;
}
#texteditor-backdrop {
  padding-top: 20px;
  padding-bottom: 20px;
}
@media not print {
  #texteditor-backdrop {
    background-color: #EEE;
  }
}
@media print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container {
    padding: 0px;
    background-color: #fff;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
  font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
  color: black;
}
.ansired {
  color: darkred;
}
.ansigreen {
  color: darkgreen;
}
.ansiyellow {
  color: #c4a000;
}
.ansiblue {
  color: darkblue;
}
.ansipurple {
  color: darkviolet;
}
.ansicyan {
  color: steelblue;
}
.ansigray {
  color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
  background-color: black;
}
.ansibgred {
  background-color: red;
}
.ansibggreen {
  background-color: green;
}
.ansibgyellow {
  background-color: yellow;
}
.ansibgblue {
  background-color: blue;
}
.ansibgpurple {
  background-color: magenta;
}
.ansibgcyan {
  background-color: cyan;
}
.ansibggray {
  background-color: gray;
}
div.cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  border-radius: 2px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  border-color: transparent;
  width: 100%;
  padding: 5px;
  /* This acts as a spacer between cells, that is outside the border */
  margin: 0px;
  outline: none;
  border-left-width: 1px;
  padding-left: 5px;
  background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
  border-left-color: #90CAF9;
  border-left-color: #E3F2FD;
  border-left-width: 1px;
  padding-left: 5px;
  border-right-color: #E3F2FD;
  border-right-width: 1px;
  background: #E3F2FD;
}
@media print {
  div.cell.jupyter-soft-selected {
    border-color: transparent;
  }
}
div.cell.selected {
  border-color: #ababab;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
  div.cell.selected {
    border-color: transparent;
  }
}
div.cell.selected.jupyter-soft-selected {
  border-left-width: 0;
  padding-left: 6px;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
  border-color: #66BB6A;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
  .edit_mode div.cell.selected {
    border-color: transparent;
  }
}
.prompt {
  /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
  min-width: 14ex;
  /* This padding is tuned to match the padding on the CodeMirror editor. */
  padding: 0.4em;
  margin: 0px;
  font-family: monospace;
  text-align: right;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
  /* Don't highlight prompt number selection */
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  /* Use default cursor */
  cursor: default;
}
@media (max-width: 540px) {
  .prompt {
    text-align: left;
  }
}
div.inner_cell {
  min-width: 0;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
  border: 1px solid #cfcfcf;
  border-radius: 2px;
  background: #f7f7f7;
  line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
   is no content in the output_subarea and the prompt. The main purpose of this is
   to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
  padding-top: 0;
  padding-bottom: 0;
}
div.unrecognized_cell {
  padding: 5px 5px 5px 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.unrecognized_cell .inner_cell {
  border-radius: 2px;
  padding: 5px;
  font-weight: bold;
  color: red;
  border: 1px solid #cfcfcf;
  background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
  color: inherit;
  text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
  color: inherit;
  text-decoration: none;
}
@media (max-width: 540px) {
  div.unrecognized_cell > div.prompt {
    display: none;
  }
}
div.code_cell {
  /* avoid page breaking on code cells when printing */
}
@media print {
  div.code_cell {
    page-break-inside: avoid;
  }
}
/* any special styling for code cells that are currently running goes here */
div.input {
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.input {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
  color: #303F9F;
  border-top: 1px solid transparent;
}
div.input_area > div.highlight {
  margin: 0.4em;
  border: none;
  padding: 0px;
  background-color: transparent;
}
div.input_area > div.highlight > pre {
  margin: 0px;
  border: none;
  padding: 0px;
  background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
 * monospace font with inconsistent normal/bold/italic height.  See
 * notebookmain.js.  Such fonts will have keywords vertically offset with
 * respect to the rest of the text.  The user should select a better font.
 * See: https://github.com/ipython/ipython/issues/1503
 *
 * .CodeMirror span {
 *      vertical-align: bottom;
 * }
 */
.CodeMirror {
  line-height: 1.21429em;
  /* Changed from 1em to our global default */
  font-size: 14px;
  height: auto;
  /* Changed to auto to autogrow */
  background: none;
  /* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
  /*  The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
  /*  We have found that if it is visible, vertical scrollbars appear with font size changes.*/
  overflow-y: hidden;
  overflow-x: auto;
}
.CodeMirror-lines {
  /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
  /* we have set a different line-height and want this to scale with that. */
  padding: 0.4em;
}
.CodeMirror-linenumber {
  padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.CodeMirror pre {
  /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
  /* .CodeMirror-lines */
  padding: 0;
  border: 0;
  border-radius: 0;
}
/*

Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme

*/
.highlight-base {
  color: #000;
}
.highlight-variable {
  color: #000;
}
.highlight-variable-2 {
  color: #1a1a1a;
}
.highlight-variable-3 {
  color: #333333;
}
.highlight-string {
  color: #BA2121;
}
.highlight-comment {
  color: #408080;
  font-style: italic;
}
.highlight-number {
  color: #080;
}
.highlight-atom {
  color: #88F;
}
.highlight-keyword {
  color: #008000;
  font-weight: bold;
}
.highlight-builtin {
  color: #008000;
}
.highlight-error {
  color: #f00;
}
.highlight-operator {
  color: #AA22FF;
  font-weight: bold;
}
.highlight-meta {
  color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
  color: #00f;
}
.highlight-string-2 {
  color: #f50;
}
.highlight-qualifier {
  color: #555;
}
.highlight-bracket {
  color: #997;
}
.highlight-tag {
  color: #170;
}
.highlight-attribute {
  color: #00c;
}
.highlight-header {
  color: blue;
}
.highlight-quote {
  color: #090;
}
.highlight-link {
  color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
  color: #008000;
  font-weight: bold;
}
.cm-s-ipython span.cm-atom {
  color: #88F;
}
.cm-s-ipython span.cm-number {
  color: #080;
}
.cm-s-ipython span.cm-def {
  color: #00f;
}
.cm-s-ipython span.cm-variable {
  color: #000;
}
.cm-s-ipython span.cm-operator {
  color: #AA22FF;
  font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
  color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
  color: #333333;
}
.cm-s-ipython span.cm-comment {
  color: #408080;
  font-style: italic;
}
.cm-s-ipython span.cm-string {
  color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
  color: #f50;
}
.cm-s-ipython span.cm-meta {
  color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
  color: #555;
}
.cm-s-ipython span.cm-builtin {
  color: #008000;
}
.cm-s-ipython span.cm-bracket {
  color: #997;
}
.cm-s-ipython span.cm-tag {
  color: #170;
}
.cm-s-ipython span.cm-attribute {
  color: #00c;
}
.cm-s-ipython span.cm-header {
  color: blue;
}
.cm-s-ipython span.cm-quote {
  color: #090;
}
.cm-s-ipython span.cm-link {
  color: #00c;
}
.cm-s-ipython span.cm-error {
  color: #f00;
}
.cm-s-ipython span.cm-tab {
  background: url();
  background-position: right;
  background-repeat: no-repeat;
}
div.output_wrapper {
  /* this position must be relative to enable descendents to be absolute within it */
  position: relative;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
  /* ideally, this would be max-height, but FF barfs all over that */
  height: 24em;
  /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
  width: 100%;
  overflow: auto;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
  margin: 0px;
  padding: 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
div.out_prompt_overlay {
  height: 100%;
  padding: 0px 0.4em;
  position: absolute;
  border-radius: 2px;
}
div.out_prompt_overlay:hover {
  /* use inner shadow to get border that is computed the same on WebKit/FF */
  -webkit-box-shadow: inset 0 0 1px #000;
  box-shadow: inset 0 0 1px #000;
  background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
  color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
  padding: 0px;
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.output_area .MathJax_Display {
  text-align: left !important;
}
div.output_area .rendered_html table {
  margin-left: 0;
  margin-right: 0;
}
div.output_area .rendered_html img {
  margin-left: 0;
  margin-right: 0;
}
div.output_area img,
div.output_area svg {
  max-width: 100%;
  height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
  max-width: none;
}
/* This is needed to protect the pre formating from global settings such
   as that of bootstrap */
.output {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.output_area {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
div.output_area pre {
  margin: 0;
  padding: 0;
  border: 0;
  vertical-align: baseline;
  color: black;
  background-color: transparent;
  border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
   the prompt div. */
div.output_subarea {
  overflow-x: auto;
  padding: 0.4em;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
  max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
  overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
   output types */
/* all text output has this class: */
div.output_text {
  text-align: left;
  color: #000;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
  background: #fdd;
  /* very light red background for stderr */
}
div.output_latex {
  text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
  padding: 0;
}
.js-error {
  color: darkred;
}
/* raw_input styles */
div.raw_input_container {
  line-height: 1.21429em;
  padding-top: 5px;
}
pre.raw_input_prompt {
  /* nothing needed here. */
}
input.raw_input {
  font-family: monospace;
  font-size: inherit;
  color: inherit;
  width: auto;
  /* make sure input baseline aligns with prompt */
  vertical-align: baseline;
  /* padding + margin = 0.5em between prompt and cursor */
  padding: 0em 0.25em;
  margin: 0em 0.25em;
}
input.raw_input:focus {
  box-shadow: none;
}
p.p-space {
  margin-bottom: 10px;
}
div.output_unrecognized {
  padding: 5px;
  font-weight: bold;
  color: red;
}
div.output_unrecognized a {
  color: inherit;
  text-decoration: none;
}
div.output_unrecognized a:hover {
  color: inherit;
  text-decoration: none;
}
.rendered_html {
  color: #000;
  /* any extras will just be numbers: */
}
.rendered_html em {
  font-style: italic;
}
.rendered_html strong {
  font-weight: bold;
}
.rendered_html u {
  text-decoration: underline;
}
.rendered_html :link {
  text-decoration: underline;
}
.rendered_html :visited {
  text-decoration: underline;
}
.rendered_html h1 {
  font-size: 185.7%;
  margin: 1.08em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h2 {
  font-size: 157.1%;
  margin: 1.27em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h3 {
  font-size: 128.6%;
  margin: 1.55em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h4 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h5 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h6 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h1:first-child {
  margin-top: 0.538em;
}
.rendered_html h2:first-child {
  margin-top: 0.636em;
}
.rendered_html h3:first-child {
  margin-top: 0.777em;
}
.rendered_html h4:first-child {
  margin-top: 1em;
}
.rendered_html h5:first-child {
  margin-top: 1em;
}
.rendered_html h6:first-child {
  margin-top: 1em;
}
.rendered_html ul {
  list-style: disc;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ul ul {
  list-style: square;
  margin: 0em 2em;
}
.rendered_html ul ul ul {
  list-style: circle;
  margin: 0em 2em;
}
.rendered_html ol {
  list-style: decimal;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ol ol {
  list-style: upper-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol {
  list-style: lower-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol {
  list-style: lower-roman;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol ol {
  list-style: decimal;
  margin: 0em 2em;
}
.rendered_html * + ul {
  margin-top: 1em;
}
.rendered_html * + ol {
  margin-top: 1em;
}
.rendered_html hr {
  color: black;
  background-color: black;
}
.rendered_html pre {
  margin: 1em 2em;
}
.rendered_html pre,
.rendered_html code {
  border: 0;
  background-color: #fff;
  color: #000;
  font-size: 100%;
  padding: 0px;
}
.rendered_html blockquote {
  margin: 1em 2em;
}
.rendered_html table {
  margin-left: auto;
  margin-right: auto;
  border: 1px solid black;
  border-collapse: collapse;
}
.rendered_html tr,
.rendered_html th,
.rendered_html td {
  border: 1px solid black;
  border-collapse: collapse;
  margin: 1em 2em;
}
.rendered_html td,
.rendered_html th {
  text-align: left;
  vertical-align: middle;
  padding: 4px;
}
.rendered_html th {
  font-weight: bold;
}
.rendered_html * + table {
  margin-top: 1em;
}
.rendered_html p {
  text-align: left;
}
.rendered_html * + p {
  margin-top: 1em;
}
.rendered_html img {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.rendered_html * + img {
  margin-top: 1em;
}
.rendered_html img,
.rendered_html svg {
  max-width: 100%;
  height: auto;
}
.rendered_html img.unconfined,
.rendered_html svg.unconfined {
  max-width: none;
}
div.text_cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.text_cell > div.prompt {
    display: none;
  }
}
div.text_cell_render {
  /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
  outline: none;
  resize: none;
  width: inherit;
  border-style: none;
  padding: 0.5em 0.5em 0.5em 0.4em;
  color: #000;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
a.anchor-link:link {
  text-decoration: none;
  padding: 0px 20px;
  visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
  visibility: visible;
}
.text_cell.rendered .input_area {
  display: none;
}
.text_cell.rendered .rendered_html {
  overflow-x: auto;
  overflow-y: hidden;
}
.text_cell.unrendered .text_cell_render {
  display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
  font-weight: bold;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
  font-size: 185.7%;
}
.cm-header-2 {
  font-size: 157.1%;
}
.cm-header-3 {
  font-size: 128.6%;
}
.cm-header-4 {
  font-size: 110%;
}
.cm-header-5 {
  font-size: 100%;
  font-style: italic;
}
.cm-header-6 {
  font-size: 100%;
  font-style: italic;
}
/*!
*
* IPython notebook webapp
*
*/
@media (max-width: 767px) {
  .notebook_app {
    padding-left: 0px;
    padding-right: 0px;
  }
}
#ipython-main-app {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook_panel {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook {
  font-size: 14px;
  line-height: 20px;
  overflow-y: hidden;
  overflow-x: auto;
  width: 100%;
  /* This spaces the page away from the edge of the notebook area */
  padding-top: 20px;
  margin: 0px;
  outline: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  min-height: 100%;
}
@media not print {
  #notebook-container {
    padding: 15px;
    background-color: #fff;
    min-height: 0;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
@media print {
  #notebook-container {
    width: 100%;
  }
}
div.ui-widget-content {
  border: 1px solid #ababab;
  outline: none;
}
pre.dialog {
  background-color: #f7f7f7;
  border: 1px solid #ddd;
  border-radius: 2px;
  padding: 0.4em;
  padding-left: 2em;
}
p.dialog {
  padding: 0.2em;
}
/* Word-wrap output correctly.  This is the CSS3 spelling, though Firefox seems
   to not honor it correctly.  Webkit browsers (Chrome, rekonq, Safari) do.
 */
pre,
code,
kbd,
samp {
  white-space: pre-wrap;
}
#fonttest {
  font-family: monospace;
}
p {
  margin-bottom: 0;
}
.end_space {
  min-height: 100px;
  transition: height .2s ease;
}
.notebook_app > #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
@media not print {
  .notebook_app {
    background-color: #EEE;
  }
}
kbd {
  border-style: solid;
  border-width: 1px;
  box-shadow: none;
  margin: 2px;
  padding-left: 2px;
  padding-right: 2px;
  padding-top: 1px;
  padding-bottom: 1px;
}
/* CSS for the cell toolbar */
.celltoolbar {
  border: thin solid #CFCFCF;
  border-bottom: none;
  background: #EEE;
  border-radius: 2px 2px 0px 0px;
  width: 100%;
  height: 29px;
  padding-right: 4px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
  display: -webkit-flex;
}
@media print {
  .celltoolbar {
    display: none;
  }
}
.ctb_hideshow {
  display: none;
  vertical-align: bottom;
}
/* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
   Cell toolbars are only shown when the ctb_global_show class is also set.
*/
.ctb_global_show .ctb_show.ctb_hideshow {
  display: block;
}
.ctb_global_show .ctb_show + .input_area,
.ctb_global_show .ctb_show + div.text_cell_input,
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border-top-right-radius: 0px;
  border-top-left-radius: 0px;
}
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border: 1px solid #cfcfcf;
}
.celltoolbar {
  font-size: 87%;
  padding-top: 3px;
}
.celltoolbar select {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
  width: inherit;
  font-size: inherit;
  height: 22px;
  padding: 0px;
  display: inline-block;
}
.celltoolbar select:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.celltoolbar select::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.celltoolbar select:-ms-input-placeholder {
  color: #999;
}
.celltoolbar select::-webkit-input-placeholder {
  color: #999;
}
.celltoolbar select::-ms-expand {
  border: 0;
  background-color: transparent;
}
.celltoolbar select[disabled],
.celltoolbar select[readonly],
fieldset[disabled] .celltoolbar select {
  background-color: #eeeeee;
  opacity: 1;
}
.celltoolbar select[disabled],
fieldset[disabled] .celltoolbar select {
  cursor: not-allowed;
}
textarea.celltoolbar select {
  height: auto;
}
select.celltoolbar select {
  height: 30px;
  line-height: 30px;
}
textarea.celltoolbar select,
select[multiple].celltoolbar select {
  height: auto;
}
.celltoolbar label {
  margin-left: 5px;
  margin-right: 5px;
}
.completions {
  position: absolute;
  z-index: 110;
  overflow: hidden;
  border: 1px solid #ababab;
  border-radius: 2px;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  line-height: 1;
}
.completions select {
  background: white;
  outline: none;
  border: none;
  padding: 0px;
  margin: 0px;
  overflow: auto;
  font-family: monospace;
  font-size: 110%;
  color: #000;
  width: auto;
}
.completions select option.context {
  color: #286090;
}
#kernel_logo_widget {
  float: right !important;
  float: right;
}
#kernel_logo_widget .current_kernel_logo {
  display: none;
  margin-top: -1px;
  margin-bottom: -1px;
  width: 32px;
  height: 32px;
}
#menubar {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  margin-top: 1px;
}
#menubar .navbar {
  border-top: 1px;
  border-radius: 0px 0px 2px 2px;
  margin-bottom: 0px;
}
#menubar .navbar-toggle {
  float: left;
  padding-top: 7px;
  padding-bottom: 7px;
  border: none;
}
#menubar .navbar-collapse {
  clear: left;
}
.nav-wrapper {
  border-bottom: 1px solid #e7e7e7;
}
i.menu-icon {
  padding-top: 4px;
}
ul#help_menu li a {
  overflow: hidden;
  padding-right: 2.2em;
}
ul#help_menu li a i {
  margin-right: -1.2em;
}
.dropdown-submenu {
  position: relative;
}
.dropdown-submenu > .dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: -6px;
  margin-left: -1px;
}
.dropdown-submenu:hover > .dropdown-menu {
  display: block;
}
.dropdown-submenu > a:after {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  display: block;
  content: "\f0da";
  float: right;
  color: #333333;
  margin-top: 2px;
  margin-right: -10px;
}
.dropdown-submenu > a:after.pull-left {
  margin-right: .3em;
}
.dropdown-submenu > a:after.pull-right {
  margin-left: .3em;
}
.dropdown-submenu:hover > a:after {
  color: #262626;
}
.dropdown-submenu.pull-left {
  float: none;
}
.dropdown-submenu.pull-left > .dropdown-menu {
  left: -100%;
  margin-left: 10px;
}
#notification_area {
  float: right !important;
  float: right;
  z-index: 10;
}
.indicator_area {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#kernel_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  border-left: 1px solid;
}
#kernel_indicator .kernel_indicator_name {
  padding-left: 5px;
  padding-right: 5px;
}
#modal_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#readonly-indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  margin-top: 2px;
  margin-bottom: 0px;
  margin-left: 0px;
  margin-right: 0px;
  display: none;
}
.modal_indicator:before {
  width: 1.28571429em;
  text-align: center;
}
.edit_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f040";
}
.edit_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.edit_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.command_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: ' ';
}
.command_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.command_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.kernel_idle_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f10c";
}
.kernel_idle_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_idle_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_busy_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f111";
}
.kernel_busy_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_busy_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_dead_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f1e2";
}
.kernel_dead_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_dead_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_disconnected_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f127";
}
.kernel_disconnected_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_disconnected_icon:before.pull-right {
  margin-left: .3em;
}
.notification_widget {
  color: #777;
  z-index: 10;
  background: rgba(240, 240, 240, 0.5);
  margin-right: 4px;
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget:focus,
.notification_widget.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.notification_widget:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active:hover,
.notification_widget.active:hover,
.open > .dropdown-toggle.notification_widget:hover,
.notification_widget:active:focus,
.notification_widget.active:focus,
.open > .dropdown-toggle.notification_widget:focus,
.notification_widget:active.focus,
.notification_widget.active.focus,
.open > .dropdown-toggle.notification_widget.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  background-image: none;
}
.notification_widget.disabled:hover,
.notification_widget[disabled]:hover,
fieldset[disabled] .notification_widget:hover,
.notification_widget.disabled:focus,
.notification_widget[disabled]:focus,
fieldset[disabled] .notification_widget:focus,
.notification_widget.disabled.focus,
.notification_widget[disabled].focus,
fieldset[disabled] .notification_widget.focus {
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget .badge {
  color: #fff;
  background-color: #333;
}
.notification_widget.warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning:focus,
.notification_widget.warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.notification_widget.warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active:hover,
.notification_widget.warning.active:hover,
.open > .dropdown-toggle.notification_widget.warning:hover,
.notification_widget.warning:active:focus,
.notification_widget.warning.active:focus,
.open > .dropdown-toggle.notification_widget.warning:focus,
.notification_widget.warning:active.focus,
.notification_widget.warning.active.focus,
.open > .dropdown-toggle.notification_widget.warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  background-image: none;
}
.notification_widget.warning.disabled:hover,
.notification_widget.warning[disabled]:hover,
fieldset[disabled] .notification_widget.warning:hover,
.notification_widget.warning.disabled:focus,
.notification_widget.warning[disabled]:focus,
fieldset[disabled] .notification_widget.warning:focus,
.notification_widget.warning.disabled.focus,
.notification_widget.warning[disabled].focus,
fieldset[disabled] .notification_widget.warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.notification_widget.success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success:focus,
.notification_widget.success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.notification_widget.success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active:hover,
.notification_widget.success.active:hover,
.open > .dropdown-toggle.notification_widget.success:hover,
.notification_widget.success:active:focus,
.notification_widget.success.active:focus,
.open > .dropdown-toggle.notification_widget.success:focus,
.notification_widget.success:active.focus,
.notification_widget.success.active.focus,
.open > .dropdown-toggle.notification_widget.success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  background-image: none;
}
.notification_widget.success.disabled:hover,
.notification_widget.success[disabled]:hover,
fieldset[disabled] .notification_widget.success:hover,
.notification_widget.success.disabled:focus,
.notification_widget.success[disabled]:focus,
fieldset[disabled] .notification_widget.success:focus,
.notification_widget.success.disabled.focus,
.notification_widget.success[disabled].focus,
fieldset[disabled] .notification_widget.success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.notification_widget.info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info:focus,
.notification_widget.info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.notification_widget.info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active:hover,
.notification_widget.info.active:hover,
.open > .dropdown-toggle.notification_widget.info:hover,
.notification_widget.info:active:focus,
.notification_widget.info.active:focus,
.open > .dropdown-toggle.notification_widget.info:focus,
.notification_widget.info:active.focus,
.notification_widget.info.active.focus,
.open > .dropdown-toggle.notification_widget.info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  background-image: none;
}
.notification_widget.info.disabled:hover,
.notification_widget.info[disabled]:hover,
fieldset[disabled] .notification_widget.info:hover,
.notification_widget.info.disabled:focus,
.notification_widget.info[disabled]:focus,
fieldset[disabled] .notification_widget.info:focus,
.notification_widget.info.disabled.focus,
.notification_widget.info[disabled].focus,
fieldset[disabled] .notification_widget.info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.notification_widget.danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger:focus,
.notification_widget.danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.notification_widget.danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active:hover,
.notification_widget.danger.active:hover,
.open > .dropdown-toggle.notification_widget.danger:hover,
.notification_widget.danger:active:focus,
.notification_widget.danger.active:focus,
.open > .dropdown-toggle.notification_widget.danger:focus,
.notification_widget.danger:active.focus,
.notification_widget.danger.active.focus,
.open > .dropdown-toggle.notification_widget.danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  background-image: none;
}
.notification_widget.danger.disabled:hover,
.notification_widget.danger[disabled]:hover,
fieldset[disabled] .notification_widget.danger:hover,
.notification_widget.danger.disabled:focus,
.notification_widget.danger[disabled]:focus,
fieldset[disabled] .notification_widget.danger:focus,
.notification_widget.danger.disabled.focus,
.notification_widget.danger[disabled].focus,
fieldset[disabled] .notification_widget.danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger .badge {
  color: #d9534f;
  background-color: #fff;
}
div#pager {
  background-color: #fff;
  font-size: 14px;
  line-height: 20px;
  overflow: hidden;
  display: none;
  position: fixed;
  bottom: 0px;
  width: 100%;
  max-height: 50%;
  padding-top: 8px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  /* Display over codemirror */
  z-index: 100;
  /* Hack which prevents jquery ui resizable from changing top. */
  top: auto !important;
}
div#pager pre {
  line-height: 1.21429em;
  color: #000;
  background-color: #f7f7f7;
  padding: 0.4em;
}
div#pager #pager-button-area {
  position: absolute;
  top: 8px;
  right: 20px;
}
div#pager #pager-contents {
  position: relative;
  overflow: auto;
  width: 100%;
  height: 100%;
}
div#pager #pager-contents #pager-container {
  position: relative;
  padding: 15px 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
div#pager .ui-resizable-handle {
  top: 0px;
  height: 8px;
  background: #f7f7f7;
  border-top: 1px solid #cfcfcf;
  border-bottom: 1px solid #cfcfcf;
  /* This injects handle bars (a short, wide = symbol) for 
        the resize handle. */
}
div#pager .ui-resizable-handle::after {
  content: '';
  top: 2px;
  left: 50%;
  height: 3px;
  width: 30px;
  margin-left: -15px;
  position: absolute;
  border-top: 1px solid #cfcfcf;
}
.quickhelp {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  line-height: 1.8em;
}
.shortcut_key {
  display: inline-block;
  width: 21ex;
  text-align: right;
  font-family: monospace;
}
.shortcut_descr {
  display: inline-block;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
span.save_widget {
  margin-top: 6px;
}
span.save_widget span.filename {
  height: 1em;
  line-height: 1em;
  padding: 3px;
  margin-left: 16px;
  border: none;
  font-size: 146.5%;
  border-radius: 2px;
}
span.save_widget span.filename:hover {
  background-color: #e6e6e6;
}
span.checkpoint_status,
span.autosave_status {
  font-size: small;
}
@media (max-width: 767px) {
  span.save_widget {
    font-size: small;
  }
  span.checkpoint_status,
  span.autosave_status {
    display: none;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  span.checkpoint_status {
    display: none;
  }
  span.autosave_status {
    font-size: x-small;
  }
}
.toolbar {
  padding: 0px;
  margin-left: -5px;
  margin-top: 2px;
  margin-bottom: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.toolbar select,
.toolbar label {
  width: auto;
  vertical-align: middle;
  margin-right: 2px;
  margin-bottom: 0px;
  display: inline;
  font-size: 92%;
  margin-left: 0.3em;
  margin-right: 0.3em;
  padding: 0px;
  padding-top: 3px;
}
.toolbar .btn {
  padding: 2px 8px;
}
.toolbar .btn-group {
  margin-top: 0px;
  margin-left: 5px;
}
#maintoolbar {
  margin-bottom: -3px;
  margin-top: -8px;
  border: 0px;
  min-height: 27px;
  margin-left: 0px;
  padding-top: 11px;
  padding-bottom: 3px;
}
#maintoolbar .navbar-text {
  float: none;
  vertical-align: middle;
  text-align: right;
  margin-left: 5px;
  margin-right: 0px;
  margin-top: 0px;
}
.select-xs {
  height: 24px;
}
.pulse,
.dropdown-menu > li > a.pulse,
li.pulse > a.dropdown-toggle,
li.pulse.open > a.dropdown-toggle {
  background-color: #F37626;
  color: white;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
 * of chance of beeing generated from the ../less/[samename].less file, you can
 * try to get back the less file by reverting somme commit in history
 **/
/*
 * We'll try to get something pretty, so we
 * have some strange css to have the scroll bar on
 * the left with fix button on the top right of the tooltip
 */
@-moz-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-webkit-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-moz-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-webkit-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
/*properties of tooltip after "expand"*/
.bigtooltip {
  overflow: auto;
  height: 200px;
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
}
/*properties of tooltip before "expand"*/
.smalltooltip {
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
  text-overflow: ellipsis;
  overflow: hidden;
  height: 80px;
}
.tooltipbuttons {
  position: absolute;
  padding-right: 15px;
  top: 0px;
  right: 0px;
}
.tooltiptext {
  /*avoid the button to overlap on some docstring*/
  padding-right: 30px;
}
.ipython_tooltip {
  max-width: 700px;
  /*fade-in animation when inserted*/
  -webkit-animation: fadeOut 400ms;
  -moz-animation: fadeOut 400ms;
  animation: fadeOut 400ms;
  -webkit-animation: fadeIn 400ms;
  -moz-animation: fadeIn 400ms;
  animation: fadeIn 400ms;
  vertical-align: middle;
  background-color: #f7f7f7;
  overflow: visible;
  border: #ababab 1px solid;
  outline: none;
  padding: 3px;
  margin: 0px;
  padding-left: 7px;
  font-family: monospace;
  min-height: 50px;
  -moz-box-shadow: 0px 6px 10px -1px #adadad;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  border-radius: 2px;
  position: absolute;
  z-index: 1000;
}
.ipython_tooltip a {
  float: right;
}
.ipython_tooltip .tooltiptext pre {
  border: 0;
  border-radius: 0;
  font-size: 100%;
  background-color: #f7f7f7;
}
.pretooltiparrow {
  left: 0px;
  margin: 0px;
  top: -16px;
  width: 40px;
  height: 16px;
  overflow: hidden;
  position: absolute;
}
.pretooltiparrow:before {
  background-color: #f7f7f7;
  border: 1px #ababab solid;
  z-index: 11;
  content: "";
  position: absolute;
  left: 15px;
  top: 10px;
  width: 25px;
  height: 25px;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
}
ul.typeahead-list i {
  margin-left: -10px;
  width: 18px;
}
ul.typeahead-list {
  max-height: 80vh;
  overflow: auto;
}
ul.typeahead-list > li > a {
  /** Firefox bug **/
  /* see https://github.com/jupyter/notebook/issues/559 */
  white-space: normal;
}
.cmd-palette .modal-body {
  padding: 7px;
}
.cmd-palette form {
  background: white;
}
.cmd-palette input {
  outline: none;
}
.no-shortcut {
  display: none;
}
.command-shortcut:before {
  content: "(command)";
  padding-right: 3px;
  color: #777777;
}
.edit-shortcut:before {
  content: "(edit)";
  padding-right: 3px;
  color: #777777;
}
#find-and-replace #replace-preview .match,
#find-and-replace #replace-preview .insert {
  background-color: #BBDEFB;
  border-color: #90CAF9;
  border-style: solid;
  border-width: 1px;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .match {
  background-color: #FFCDD2;
  border-color: #EF9A9A;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .insert {
  background-color: #C8E6C9;
  border-color: #A5D6A7;
  border-radius: 0px;
}
#find-and-replace #replace-preview {
  max-height: 60vh;
  overflow: auto;
}
#find-and-replace #replace-preview pre {
  padding: 5px 10px;
}
.terminal-app {
  background: #EEE;
}
.terminal-app #header {
  background: #fff;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.terminal-app .terminal {
  width: 100%;
  float: left;
  font-family: monospace;
  color: white;
  background: black;
  padding: 0.4em;
  border-radius: 2px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
}
.terminal-app .terminal,
.terminal-app .terminal dummy-screen {
  line-height: 1em;
  font-size: 14px;
}
.terminal-app .terminal .xterm-rows {
  padding: 10px;
}
.terminal-app .terminal-cursor {
  color: black;
  background: white;
}
.terminal-app #terminado-container {
  margin-top: 20px;
}
/*# sourceMappingURL=style.min.css.map */
    </style>
<style type="text/css">
    .highlight .hll { background-color: #ffffcc }
.highlight  { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
    </style>
<style type="text/css">
    
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }

.ansi-bold { font-weight: bold; }

    </style>


<style type="text/css">
/* Overrides of notebook CSS for static HTML export */
body {
  overflow: visible;
  padding: 8px;
}

div#notebook {
  overflow: visible;
  border-top: none;
}

@media print {
  div.cell {
    display: block;
    page-break-inside: avoid;
  } 
  div.output_wrapper { 
    display: block;
    page-break-inside: avoid; 
  }
  div.output { 
    display: block;
    page-break-inside: avoid; 
  }
}
</style>

<!-- Custom stylesheet, it must be in the same directory as the html file -->
<link rel="stylesheet" href="custom.css">

<!-- Loading mathjax macro -->
<!-- Load mathjax -->
    <script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
    <!-- MathJax configuration -->
    <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ['$','$'], ["\\(","\\)"] ],
            displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
            processEscapes: true,
            processEnvironments: true
        },
        // Center justify equations in code and markdown cells. Elsewhere
        // we use CSS to left justify single line equations in code cells.
        displayAlign: 'center',
        "HTML-CSS": {
            styles: {'.MathJax_Display': {"margin": 0}},
            linebreaks: { automatic: true }
        }
    });
    </script>
    <!-- End of mathjax configuration --></head>
<body>
  <div tabindex="-1" id="notebook" class="border-box-sizing">
    <div class="container" id="notebook-container">

<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#20195;&#30721;&#22359;1-&#36733;&#20837;&#27169;&#22359;">&#20195;&#30721;&#22359;1-&#36733;&#20837;&#27169;&#22359;<a class="anchor-link" href="#&#20195;&#30721;&#22359;1-&#36733;&#20837;&#27169;&#22359;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[1]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span><span class="c1">#绘图模块</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span><span class="c1">#矩阵模块</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">tarfile</span><span class="c1">#文件解压模块</span>
<span class="kn">from</span> <span class="nn">IPython.display</span> <span class="k">import</span> <span class="n">display</span><span class="p">,</span> <span class="n">Image</span>
<span class="kn">from</span> <span class="nn">scipy</span> <span class="k">import</span> <span class="n">ndimage</span>
<span class="kn">from</span> <span class="nn">sklearn.linear_model</span> <span class="k">import</span> <span class="n">LogisticRegression</span><span class="c1">#回归模块</span>
<span class="kn">from</span> <span class="nn">six.moves.urllib.request</span> <span class="k">import</span> <span class="n">urlretrieve</span><span class="c1">#下载模块</span>
<span class="kn">from</span> <span class="nn">six.moves</span> <span class="k">import</span> <span class="n">cPickle</span> <span class="k">as</span> <span class="n">pickle</span><span class="c1">#压缩模块</span>
<span class="c1"># Config the matplotlib backend as plotting inline in IPython</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#20195;&#30721;&#22359;2-&#19979;&#36733;&#25991;&#20214;">&#20195;&#30721;&#22359;2-&#19979;&#36733;&#25991;&#20214;<a class="anchor-link" href="#&#20195;&#30721;&#22359;2-&#19979;&#36733;&#25991;&#20214;">&#182;</a></h1><p>注：由于该网络地址下载数据太慢，因此，建议不使用该函数进行数据下载。而是自己将数据下载到本地文件夹中。下载的网址如下：</p>
<p><a href="http://yaroslavvb.com/upload/notMNIST/">http://yaroslavvb.com/upload/notMNIST/</a></p>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#20195;&#30721;&#22359;3-&#35299;&#21387;&#25991;&#20214;&#24182;&#23384;&#20648;&#35299;&#21387;&#21518;&#30340;&#25991;&#20214;&#22320;&#22336;">&#20195;&#30721;&#22359;3-&#35299;&#21387;&#25991;&#20214;&#24182;&#23384;&#20648;&#35299;&#21387;&#21518;&#30340;&#25991;&#20214;&#22320;&#22336;<a class="anchor-link" href="#&#20195;&#30721;&#22359;3-&#35299;&#21387;&#25991;&#20214;&#24182;&#23384;&#20648;&#35299;&#21387;&#21518;&#30340;&#25991;&#20214;&#22320;&#22336;">&#182;</a></h1><p>由于该代码块的解压速度太慢，因此，利用解压工具解压该文件。并将解压后的文件夹地址存储起来，为后续的调用做好准备即可。下文代码删除了作业中解压部分的代码，而保留存储文件夹路径的代码。</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[2]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">num_classes</span> <span class="o">=</span> <span class="mi">10</span>
<span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">133</span><span class="p">)</span>

<span class="c1">#创建每一个类别的文件夹名</span>
<span class="k">def</span> <span class="nf">maybe_extract</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
  <span class="n">root</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">filename</span><span class="p">)[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>  <span class="c1"># remove .tar.gz</span>
  <span class="n">data_folders</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">root</span><span class="p">))</span>
    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">d</span><span class="p">))]</span>
  <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_folders</span><span class="p">)</span> <span class="o">!=</span> <span class="n">num_classes</span><span class="p">:</span>
    <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
      <span class="s1">&#39;Expected </span><span class="si">%d</span><span class="s1"> folders, one per class. Found </span><span class="si">%d</span><span class="s1"> instead.&#39;</span> <span class="o">%</span> <span class="p">(</span>
        <span class="n">num_classes</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_folders</span><span class="p">)))</span>
  <span class="k">return</span> <span class="n">data_folders</span>

<span class="c1">#本地存储notMnist数据的的文件夹</span>
<span class="n">train_filename</span> <span class="o">=</span> <span class="s1">&#39;/home/zlong/workspace/udacity/notMNIST/notMNIST_large&#39;</span>  
<span class="n">test_filename</span> <span class="o">=</span> <span class="s1">&#39;/home/zlong/workspace/udacity/notMNIST/notMNIST_small&#39;</span>
<span class="n">train_folders</span> <span class="o">=</span> <span class="n">maybe_extract</span><span class="p">(</span><span class="n">train_filename</span><span class="p">)</span>
<span class="n">test_folders</span> <span class="o">=</span> <span class="n">maybe_extract</span><span class="p">(</span><span class="n">test_filename</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#38382;&#39064;1-&#26174;&#31034;&#35299;&#21387;&#21518;&#30340;&#22270;&#20687;">&#38382;&#39064;1-&#26174;&#31034;&#35299;&#21387;&#21518;&#30340;&#22270;&#20687;<a class="anchor-link" href="#&#38382;&#39064;1-&#26174;&#31034;&#35299;&#21387;&#21518;&#30340;&#22270;&#20687;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[3]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#Problem1: Display a sample of the images that we just download</span>
<span class="n">nums_image_show</span> <span class="o">=</span> <span class="mi">2</span><span class="c1">#显示的图像张数</span>
<span class="k">for</span> <span class="n">index_class</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_classes</span><span class="p">):</span>
    <span class="c1">#i from 0 to 9</span>
    <span class="n">imagename_list</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">train_folders</span><span class="p">[</span><span class="n">index_class</span><span class="p">])</span>
    <span class="n">imagename_list_indice</span> <span class="o">=</span> <span class="n">imagename_list</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">nums_image_show</span><span class="p">]</span>
    <span class="k">for</span> <span class="n">index_image</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">nums_image_show</span><span class="p">):</span>
        <span class="n">path</span> <span class="o">=</span> <span class="n">train_folders</span><span class="p">[</span><span class="n">index_class</span><span class="p">]</span> <span class="o">+</span><span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">imagename_list_indice</span><span class="p">[</span><span class="n">index_image</span><span class="p">]</span>
        <span class="n">display</span><span class="p">(</span><span class="n">Image</span><span class="p">(</span><span class="n">filename</span> <span class="o">=</span> <span class="n">path</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
TU2THhAY9EAis6y4WooplJFyJcUgGjQIiqhBDWrUpD+hmlRE44iiSMUk0rzqtZeZRpEaFEVJT7DM
1zme1eDe2tPFWnvttTb8H4/j8iVJCuWXYPHSiDMYKpl+b8D4axaNjVhn0pgBQ+YnncZhWDCqszhS
TCPvXFHA4mXEN0dkgrxCGooy3BsALOsCSZKf3qlgToHO25Rolfu1Pv811zPycnKy84Zojxxx0+0p
N9zUfUqlOA5LybQOcVUjmRaw88tL6aeZrwN4GVHiCyb6XS3JqRRxj/wdJHQZh4EOdVMTqBkPELv5
0FdUTFZT7rzxl8ZIUOu+DqSvHNIlTvyLR6G2klAH1gMbbltLN2Nn5sIQgOjU89VlPMAAHqc0vpLs
iHPOOReJRiMclUqwALSpi3g4lxKdn9UB7urJQoyH0fJyWqgyv9osGH/nqt/tBcX0TXsBOA4q3MpL
XcGCIakW9kp1OMBxRQNsmFETUS9CbFInuajPuRismV9cySD10S+D+EFILGuyhxo6J4zAsl2q5446
Uu5ua5jYlA7jgbXU8S1ZUEkXBkNBBZ1ULvzRQwgYErrFPqkUi6NRqqVDvRjAav0mHhFnaBRhqObd
0yUx2rCAZVv2TKvdTHLSkwkyyxn+WZ9Ld/q3bugFMWk/DstG6RjX9CIzJZu/hXtU8/MhIYZd+O3R
HTyb8gTQKNXTq9ZU621KUCE14AC4oJlXg390Cg9L4bi+Pf6o7yvSjbxVqFCzZTgcDQqkQHcwBuAv
0Esary5Fx7MAAAAASUVORK5CYII=
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
UdK0SMBBrFSzqItYilAHQRAsIrg4OEkXwb3YRVAQoVAQBBE7uBRcHER0UHBSlAqCiBisCLUotFTU
QMr/3j0O+aPN35z18L53+LhAd0TK088aNQh6xDBDchzWo1PZ8ye2eB4BALRA5bUBGEbBXtBjMXnk
gx5Y0fCKkZFvdesgwxQXI53fh4v/QXVw9d1x0j0d2sI1zHFyW4seebZYGg7H11L+wBQ5UyjF9AVP
AI+ZZVwolIYLfIIS5hgTF0OXQNWh5XgEfZhidP7c1TXXcIsLMJMJJjrHNnMVR7Pmfgiwt0mPvIjw
362E2TD/qRz6Sus/QKIOoG0fsHRpbOPMaRDAMJQYRfoHld1r3BTnUj8kfyl+o7I+/UsICA9cAVCr
fRHmS085r3cw1d9MzpP5XNHtDf9WDaUQQiiF/iWmjJcRoADUr47I7CqzGGPM0sZXEKi3j8Ewkfzz
gEjHxn1miS8BKNR33BGZb1p+NqJrgGCkKqrmvLsv4TnapkXdHRAfrNOAnfcYE28PdcaGgx89MfJh
Bbi5zESSK+/PwQSVp41WbmLlEZrMSDKRkzDDOEknSWZ88xd4UO/LC7DSbwAAAABJRU5ErkJggg==
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
o12m3TbJlsipdWoWyRqHHeSQcy4okYt1uN5yJblxoVy7cCFla0k5N4RYu8ssIqylKKTkUJNZO2bN
zDff42I+lufqrfd9n57efq+hoqozkwuWEZl9/TaolJZZRQX6q0CZepx1lWawtiq7tz+ozMpdndqZ
sT4OwJRZxMD5Mc0qA6Y4qYHS4vpgKHRtzOg4h+WPOMvX2comC+u4SAvpYzUB6EhT/8GV7VwBwHFa
b6KNP7UfD0P9N7VzWB/GVRZrX+gUbfo1jcio0RxQaR4DugCAx1JpF5d0FQyWTvUQ/6XdlbS0kr3W
EOd1rME3xQmtvPa2Vw8+rFyDPqXYodJ/WbuxDmwwcxo3id3OeQI73DJh8H5J0Y4w6379aMaGLvaB
TuKFHcokef908QkzGkB2ItsSpciTPQXjMKpbzk1Wz8l/AtB4r/C5drzrKTgfPLZKSdI6iwVLly6T
kNbjYTEkefNo4lyuY40XzJjNXTbypZcAa/yaBM9ym6JDTwhkaKn72csKurJGYJkv7eScujEGw2m9
YNZ3teHAGtaRux1bQhoro5ok90jEvvcSAJY7SrFGWoZnHCvLWs85pTGADabHSbOFdy8JBEn78XFk
KSksYJkfK14jTk+myrogkuD511Xj6Aoh7NQrlkiFXD6fHx705ecKelWLAdzYBaSIdWdHOWGKTWOG
+/xS9NaQVwbYLG0I74yjQzfA/CHbtVI4esiGsNsp9FHtoxD2t/+SLmkZI1/xG7MfImFU7DOTAAAA
AElFTkSuQmCC
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
Zlqa4sDKGrONEjtQJJQsJ4ikJMriwNFOOHQiyZkDOZTakVJS1s4kDV9Kk32bNZsY5k/L12Z/vvd5
nsvB937uk6er33N3XfdlgKmusD0kAMggmy99fT84tGIARsvQ50ySpOXx0ellSVGFbvIx+iQp6hRW
33FjSVnQl/YcJmyYVwwaWYWR0Kegsu7n0LFXil4DpFjK6qJC1Iyrwq0Eg1cI+WRxGhnrcyi6EMbb
XNWCKOUwsAuT+/kRgcW0GYsMV8Ou/aHo9RIDHG3LCkG9LrfsagF4hwOXcrq2HN2twcpmyiVl8rpI
beoce0qKusH/sPeURamHxGi8PCe9PoQjBSDSg4OFEwdrGtt6Wpm8+ogaX82z8beiqpOF8tjddpJq
eYcV5PVgx4He8zeHQ1TUwrncM6FfmbxOkoJx9Jd8FnW8muehfNRiNzVJkqacUZBXsaFimYwrBE2k
eQdrJhUUdcwBRscmTIx4JyAm82OIyM4K7KwPJgp5BGMRAWlF7gMcRZRf3YRhzFR+FuSjSq2VTaNp
QkEq7wYcWxYUg0apFn1EUZmeVsRZeXkNkIC5lPo3CiGW94Mzx2N5ZbpOChjrnshnQf0kQMOVICno
+bY6XHPntWn5qL8XcHC7+K1a+NLU6IfZFUmavbOZBKzURDQDKk/5z/dPU89ezJlF+Adz3zdrxlNl
PwAAAABJRU5ErkJggg==
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
KBb0ZEEa0IMUoRRMsI1vVDDoTdAKQo/ePXr05gfwExTFi3gQ2grR9tAYCSJSqC/FSxUUUSqJpbXJ
7ONhd7tN1uc0wzPPy/xnIIFPRU4pOrpvI8YYfHeW3c+K9l6nUAyX2ad8oQeYZHNH64EFMOGta9vW
TlCey8fSsExjKzKhKSepu5tG/tH1KJATPzXLEzWCA4UEB4ejOpZZfR/xN3QXP+2AhwUc5/n4pTrC
Cp6XksKCp+AcC0yy9gYneuEzLZV4pbkeV+LIe1odOLajmX7S4HX9Cu861cF2k35TDMUd3eSRFnvq
xEouDm4tByVe42eUPg+1SEUqJYNNlcYdPk2Tq6yvZSKNx8lRzVPmZSvjaqDKRuP4Ker01QETMkXN
lYZ+13AZUmNj1LnC26/ZW1omgs1abpzn2FS5d+yxVpiWm/rfYAvjLHGBTx+GjBIz2t1oOaNQbv+X
DFt/Vw9Fza2etb2jZ1j6louEGriUe7/pJ/mW2/oxGs/OUNzWjTjfGh8uk38aT8Bzw/lWfa+ux5Ff
CtPMruaTt/sHGSLJY4C28jEAAAAASUVORK5CYII=
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
UkMdVBIMooNUWgTFBsSioAiCgiC4CCJx6ebiKgiCWyn+AYIiiDjo0k1th+KixUVxKQhFi41RQopN
mnffPQ5JSmLeWe7w45z7fYfP0JGxKa508vSxvfnx3e3NRr1WbVe7zFryt5cb6lPQWgRgnN9zt7Jf
JnxZXKn+yRXK544GP/Khwzj7VWlbHy+5blJ8oyY9BIzhQVCSaN5iIuecc1FERboFxvBYSep1H+tM
1+k48jfMgOWR2sHrFbaHwJD73TqEo6JEQRsFLH3QrX8fhdIvBSW6R8SATp0A5pUoqHYQw5AO/FSQ
14v+0F4v0eV9wSKWhowB7AxCUfg0nAl2CgvUfxAyYBEQ25uZzhwGaDVQBmx1Hpe1id1AwK6xzNg1
hGG8NOg0zgH2HcL4kcn/SkhTgKmmJK+FwdoLT24C8FSJgpIybgdGzGkBY+BwTV6p3o/u0JjppmaJ
wHFlW15ez2M6J+Iofla9iAEc17bkvdfiZHfii9+CXnZncEwsKyjR1uvZC9Pn77xNg9fV3ieW+Pqb
dv9B+2cxhk6QJZjjZ8oTY/lc0qyur64srUrAPydi2eZYYGebAAAAAElFTkSuQmCC
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
XaEoiFBCyBz4wiDNF6RmaCViBI0K6Q+oQaNmDhtFsyCiiAaWVPggwSy7Xr0aJJpBamBEUERSl+z6
uuesBuca7dlis/ZmL34bAAyZywr0rwJtlWHxwqaqCvi4ukOh2irKXVqwzgCAR4++FGK3xyzqOo7Q
aVK2mtlP1Vd8DzCp/ALOFme4DwBYitZ0lVva2l6a2lRKNwFwdMsvJq77RPLyciMz6ueykq3p5iNN
UhKoC4flSFKXuK2FbAtYf18Fk7SbX1NgHO1Zv+O2lYlkaDyp4BTP9QxjjKFP4zSkdA4LiBa+vThY
xgRORgcaiNHqvr8Nz2RWD+jSejkWR4dUzaiGsYDl6Kq6uae5HRg87mghs2Bd13AWLLU5K2PmOMOb
TiaVXUlsvXknw4RhDmiCpkAdeDhqpIs81nQWxmLYX8MQdeZzFB+oJzG4u5TYmidwXJCqiesJFgxR
DdMkteGwQCNzbw6VMoDBqugwI7TwdZwAa/xILTOpM1nJacBSu3ctShOjCSOwHJM66VUUYzDc1Tyl
CXXjgbWc5mc0v54YVka5J3hF3a6VcQLA8FpPaZPqcMaj2Vc7fYphAKuScuJ0sDhPIGiyy/GcOgax
gEdV3no/FcQTEd/4kXre/zi/h7F06L16R6P8EI+tQJKv+RwM4OVXMkjmQCLDCbNRWZwc2fSzXv5x
PkCn1JamF4+HGoI0r+A1snGjx7pQ2UKmyEwhP9RL/7+BpIY02gB/AURoGsqj6bQMAAAAAElFTkSu
QmCC
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
SuhtVVhoRKsuaUTEuhJLsZKIsGgsGhsbiZ0/wMJC7OovQEV8LERIrFhokJbe+miRtPFRbhP0631n
fl3MfZtwdmeec848ZzKA57QUJClKUnNi5FIdPAB4zozOKsVk42shaXFkf0mB2nOFGL8fMWr1CxOK
+nuqpFbhmvJcV9JB9bqWpUFcos5uKw864TPMZXBHKzHva3XiXqlQ0ZuKPb1/Yq4HrgXb51XoUxVL
g7inPIaDLiW72hDvF5xatzyB6I671LnbCnhTKkiv8cZAK+0D4yVqQZoYdDiAyD7MqbG2Ns0co5Zg
pRvs10diCSNA1QGOrTuA6TlTCTdlwIIDjJ3roxgvfTA2GmIuwTqC8daWAF1EMZWK9xIdY6UsZv1E
GHVAYA/mlibXfKIOYI5HgFGdUa63lXKso/ZDRXxXdWB0dwAfVrxKeKw9YLcWHDh6sgBjpYxFO4ts
cTjZ9/8jm8XBwxE3PO0Bx33lMRxq/YuM7d9irs9bnAOjOqVC850YYOvY/EJ5CEfxgPf1EIMmnc+8
99DzTMtR50hDuawiarYCwLbzP7WklSF8esaTVyuG7OHNubau/oFOoDH01AeAG1/0XzQubiBLS4ng
DCCIuNycaTy++5vUxyp5g/ONPsol8QAAAABJRU5ErkJggg==
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
rAYSTDQbC7awIMQEKdxFESlIiBbGaNDChMIYe/Uv0IrKir/AxkoKoxaurigrkYKCwvixiYkGjWJI
YAm77Ju5FvM+lni6O/fjnHPvQIKACbGSoSPzxme0JrDn2G+Ij1WnUHJv6Op8JQvoJLgjX/IGQLsb
V/aMGaP8KBe3ujIru34Iq2JFJNrPKJsy6wk5sSlzPJF6/lAhweEBL8cwJ7+K4Xe5R5BpQGEAy3k+
/bhU5D09GsAKgGBASX6SF5xh+Z1q0Q0D2laO85opoqt9DjThy4aSNH9f1vVoqtPK6diuQUXBBGsu
umudBd28WVlZI2nUlFoyS6E3CILA6LAmDzHZ2m5J81j/hnN+qpOLiSMDTFLfmDlqF3cDAaG1hEun
DjbkAQvyoRfFQRjF8JA84xRL7Vzk36KuS83LNzXclssHduenOs5SlXK4+TZlypIyMkKdC6z+Sc11
rW8sv1XNnaSKselrWvZYlpmWTuV/SkxhlBpTfP3cpyW1vhMLvi5ObPeXdNvt9X5v2cjTHVUcp/Yz
9I3SMx1+3AoSfsNt+T0UX0lT2pNrMb/RAcyQW4xXp+xAbrueylUc+Ssu44zkOcqX/gOdMexaxzgX
UgAAAABJRU5ErkJggg==
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
KkU3ErXL5teVQRdaZSRtkrZCizZBFNSydhG0CFoWtG/voghDqDYlYWFCYaH+IdWi3IRE5u37Zk4L
v0+ps5rhfc95z5yZAQhcVoGUbSBPyjUSALH8uqMXAAuUMD5aub53NfrkZm6uKDR2dPYPVkkniq4q
w8qU6VbZe25dM80OACU7CHje+gbvvQ9u9CsTy8WMpD5MtvQuKgGmptX0amv8tGKuCcMAnG9fVB8b
TJe6urDElHwESPx++XO2MOs5o6hcFwmA2d7TrZuaeK4rk9SPAzyPNOAqW8UR5Uk/tvtKCA0cWlnc
jdsMo/pJMdeTjW3rYz3DYMOQqbsHg6YLzZWWjp3Ha5rE55uqQ8q1hUxD+JIJRwGysZVKtbGttyWs
fkClH8eo8qg6AOHYgt43YIADLLXWMDHnqsFbevM8za15FbKmnm65yGSKEQJ/XB0zFUwOuwRMFTf0
5dsLpCK8wH1lScu14uC+HaOhjMDGlUd9bqR8F54rs6fwgLHrl1Kup5uJebdjQWcJgLdBJWW6gy+k
KjzQfCsWwMUBYjCmfZFIzM5f0tiSjzhonldUruEyk7Zrq0kn8YRUqd3enxzG3T11rHFbZ9+RA2J6
3CI8rK8p6V/kmW4QgHUp/vcVYtL3fTj4C7d+Eb8qksmCAAAAAElFTkSuQmCC
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
FFxIQSUtosRF2IxY4TQV2A9BC1cuKgLbumgduGjfukUQrVy2cJEEVmBN2I8OZT8QpA2RFLRxcDKb
c+/b4t65muO7PN/3/nwvBzbRuqRQKbxuu/jdBNi//XtZrgUCML7toGYTkgHHuN62YwAIGNNyhwMw
6rmVsT5H991Wxcv1AV5VAXCMqS5JfzYta7raEL2naa6r1t/SuStBZ1cLDjDKnuEReZ6XqSoNb3CA
DQf38zg4zUuyHiCKAJRYTmiBnHwvlq1wYLwpsMAlfhXygTAmM1c2SrX3rWmEknycs67LBA2mDU+1
V+eC+w+8B7t2dvTb09QPQ5FnK5nJDQG2nuP9dxslQ+M7jjHPnWs+7jlkJukQh9GhPh4yyJsP2Qjw
mSnSYwNu6isDCk8mMbaeIgo8YYil14GN5cIG0dnowFFecJHSuq1vYxIwotWerhVdaVLFwgU+V4p7
Vuc3Y6TD0B1nmiE+fTRRMzN/mBLnmN1WeoxxVbK9vzXcbInlPO/Wh7OVxWZL7O4jTHGC8o+gyRJG
tdHX9lM3dlDFFfGTrpuZHVThiyKFWmz85v/wD3x9wDSpU8bNAAAAAElFTkSuQmCC
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
mCARrBLFQkPQhCBYi43+BisRbK1EURD8B/oPBCtT2GltSDRi0JAEJQElaqGGYLEounHfu3Ms3r5l
3dvNnPmYM+cCJO5KLknyoiiKoihLqdSzADh7SzsGgKWUUkoxCmO56kHr3k0PsvaN7yON8aOTc2eh
M19JITEnV6GF3ix3pKUQAHDZSYTxOjZjjLHBwj6LnnponkEYa5kMyIpuc5GKJDODFNofEQBqjnU2
qUjzdIbgceebOYD4ufLqRw8MHNuXl3pIrIbrdlXMNt3EatU0QQgDIk7U+xBCjEmP3x121VcZT1Rm
7baq8oo+tDAqQ6Y0i8HuVAgHRo+cv+YvO6mkXnzqTy95SVLWdSI1yXQrR/hbxNgwBOtQizCPQJff
JIsjF2+Ptb/Q9xN4qtLVHq/KW9po9Enz1jTmcetXMBH9bf5aBO+FYByfwsSmW3ZXPhQ3qowSYJxu
5GisY0Dm+aU1vF6ZeKBSrnO9ZP97Fl6odO1N1GFG62uByd9SqSWzISpAsgsHHdi2NCSmoC5XJeCz
C9OQfuK+XMpanR0ddvNoq13n3f20vTLB4OKuVNZ/IW2PDrr6B++j6wniWe8eAAAAAElFTkSuQmCC
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
qRH2A1khNWQU6DgOUSZaRApaLWoRBG1cFy3ahBDUol3QNowWQdEq6HcMQ9D8S2NKiGqRmlFtzIWa
ac2997S4jnqW7895D+85sIqCCQVaga+bLqobD/svWcHkgicA4xcn1Le8ZMBxQWNxDAAe7ZosdQBG
O6+vs36KzZ0FioZzaUbmAHC0KydJS6snF3Q+T3pXGdq1mIqVlSyjbGMMBxgVHeUldQxlNacV8QYH
2ODADnpsIyMq8vMtBVo+eVVZaqQjWNbCgfFNA1na+DlafmYxYjSx6cdhxL39t06T0QMuyc+/5xUe
DmzQFJ/v25JiiFYG7hfIo/xy0cM88x1lOKE/uzd800WKCwtpk1+FBQylH3SNTr3nnHxpUTe4rf4Y
BofRnn1kSNNF7tFcWHWIDClGc84HPDr0lWROJ/FwXNGXeEJqxQOLaKCHevdjAGKKNfN+oYVfw4Tg
bFhZyyBtvJsxgcJtaXpoonfGCKwhuWmuu3Q/L7AYGoqDrvXVDOJFtnZqlFP6m8bD0alhGrRUiwVs
4A6S4TAfs0bWj6d4w3EmxggBS10VgzTTH9gQdiXpponuwEbvSXtTvYlKXpuSwJttYeZtVYIBbAjA
cz2lI0qJAl9SqOmKKGduazVPmH02WwjGLzvG0JQX+/TdRE6f1VJNpBuPes3vXWO4ayS453tRISxn
/LPDKljujitczWNOt9Ym5T8x3BEAnbHulgAAAABJRU5ErkJggg==
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
KP+iNIxFK0UJWkQUilOh0KpN0iJatYyCNiG0aNMiaB2l7YMMgiCINhEokf0hwgiCEBLUUst0JKY3
993T4r2ZxrO8P853zz3fNWRyQVHvsXJfW3ub2d7e2tj4UeoYyZBxxOMvKmqS11MiAEt67ka/zPrz
2aXN1p4jx/uND26ejBUmFUL1dhcGgF3lV6rpbMYOvFcSKmNY55xzLrJ0LEgDgKX0RYmSMWKbpzMx
D/WtAwwtM6p53SSmoYgpzQKOW0pSzRfy+wCIuaPHODhUVfC6lOXOZRm8dhgD9+WDvvc0Gxsqrip4
TWN3HtvIQnS6S0bMYcMOGAIQDROs4yOql9w0PhrAYP4uN2DaZI9KGKhVGnCkM83MCilVKejnniys
pe+PQraWoLUoylcGgPg94Yrnu71RvH7vCRUpqFL6/0zHRXmlGsfZFQSF7jo0kWMIgl14BvYTwaR2
sF6C0qRzFCM+bNvUvsQA5UZaQ7EoK2YwUFxRCNrorVsdF5Qq6AQOuzSJN2nrdZzNnUcJMqufCUDL
nGpBuoxxkXORdW+VpnqDASz75+W91919GHCUJXlN4bJW2h8oBK+16StnRk5NLKvmE13Nl28Mw4+2
mj90UDKKI58cTOnk0MHevbvjpLr5a/Hru9eLAP8ApdYEEPL0IlIAAAAASUVORK5CYII=
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
RIfWhQWjUqFOjUSNNSFGTTKx1dEGe1mE7uLCjQs3rkTB0o1L9yLeNuJCaHHjeIlJc2/atKamGrFN
rIIgKJKYe+b7/+NiPLvDgXM48ACAZ59iKehHPEaTEinonFFSE/N/Thi/AsYh5v566tVbihxDusIJ
/bMK5xzduswxPcsYgGlTlgL7GJmJ5FRdTx9tDL8DIKJDrzd8NKV2PJ4jmq7KPNfRUqtxSX38oOlP
MTw31Eeb5rZhgEvSrXTSSv//Ti5eXcsdmhh/6Aww6jdwm2Z+I+XLqftMAxykBytNntF4ea2KWQzP
WU24z2eVx0fgAnsZXf6GN7kGLxe+Y1hfVb54iADHuhl1MKAgSVJRHVzXL3gisDi3cqnXrv4cQumY
3arI0cWHlxfV6VKVkffe+7JUKsV+qQbDcCHTwIjOzy6EEEJYnlr8iTy//4eIcMrWUKCBkUfpxC1t
3k2BXQwvRgHwnNZLq1fcjCfilP6t3Bj0LR4iRDPdyR4m//BmSfkhRufy/u0gCZglG3fQz2EGFlSM
47V1dPElPa8dYI7ta2bvflzNfRyOlnR8e+UXDOAFeC7oAd9ragtGxBUN0aLFnRhgcdRIgb2MP3aJ
C5k6hviayb8RYOyspp88vRiObA3d5LgXTAAc14uKzfPaj8dzUm/S2Wm1E5UgOMjY/IH08zGEyNG3
0Jh5NUgMYJ/UcpPdPHjlE0vWb6WHNh69dAKw1qriYEUrvYBja9ViT9kuCiUIiFooXovW0ImAPO7y
iiqGPpDOhBLFGqvEAaOKFetJycB7QbMNsT/y4l8AAAAASUVORK5CYII=
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
YhSRBBQVybJRg9ramJgYE2Nl77toYaGdL2BCZWVhZ4yFjQ2xUKFYBZcFIRiMQIxxA8zMsbj/Jk53
8825c+YcINg7JUk61PaQ8UySpJL0PmClmTcioGrrZT+wt7ANYLH7CgBGnitlPTnp0+xeyeXv/SM+
NXigA201iUAwujrQPBYCgOwshYX9mAFp9DjG21iVCkCaBhbNAEzjI0QtZeFKpjE6AsCYqLL97OHQ
SvMMFcsUh20ya7tWQ8YmCb+7uJQriA4BX8vUUGZ911FmFuhgUAGhtMjxO80CWDk6Q+QLcggtCh9S
cumxcSIr4FC0idw6bQJME40SdrbcHZh9UtZ/J2sx1ErT2CSW3vT9pq7OlNAtwZWB68rqMTgv1NdT
KleG0iId6cbgT8Y5Al8ZGKJNYSVbAkI5dY6KZQQEKLQxOrU5Lg6XsN8bQNksgY6HZ7RJbG7X0DQ6
RSP1BsnOITb6oYacHy38WndYuAwsY/6PwCUSq388nzLcwjx2qDC7htgx80VTk0RWzROIh7pDYF/B
wMg3QgpsqjbQeKyc9NHrsZu9kpMeDTub/+Zhf359G+526gLWli4QQF5Ike7BQx0Wr+XHCYx/Ai3/
upy+leAAAAAASUVORK5CYII=
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
VkbtsCQMwQKxgsrwIEZCiwgKDE9WRJccQpew6FQodNIET41Fp8xu0iKIdEGGhNAiq11KBXWIIkuX
uj/u/Xap2PteHz487wuvSOm4m4v8n2yHz4T1zXtF07PiD+6S4lzUOE9XWvna7vE1LELminHSEIP8
022yvw8Kn72uFHofrCoTl5y/ZVVZvmxh8yhkB8pcTRRyY6VOnL9vDd6fFf/FdSV13sJz4+jawy2u
bgg2XtsTt0ay8KZJytpzyvRpC1sTaOaez514Bb9fWLj9eR6GT0p5uKAkT5l15GoSTd/yuqY4rDyx
sCJWgGf1UnGnqHw6amHHFLp0w7nQR1jut3B3fBMita6yB/hw2MLbc2iqTaT1Cyz0WLhvogiPql2g
H3h78B/0iYgQPuBhdmRaQiHc/MiUgcFvCt1BVxUFhqtsY28a/XFGJDyj/Oy0jdUzwN2AqxkCBgMW
Ps6g3xtFulKQvG7hoQWgs9LVxVCN7LFwcAMSx5x0L0GizcIjaeDaDjk+im727rTwZQ7Gap1/4BeM
XzCRNK4D85OJyRXI3y+3MF74+/0K71os/AM4xgW1UDDFHQAAAABJRU5ErkJggg==
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
krUIbreSLklhhFVC0CJF/oKFfYpAqtT5AfkHSWObynRbhhVBYRsRE4iFYpUIyxa6iBDf3JNi3773
fJ5imOHj3Htm5gJAYF2SJxXyXLrVx4ypHvwK851WcRDx38X1aJdKreVDJUlyTT49e1gjZkTeK5fk
rk0iBAuzSsIQAG79b3MyXFlldp4U6b7gPt3VtAQgO93FaUCPKxgk+pdRDRjpLWEosofRgMZqKzdk
FwNSE+ZsTB3HoyDuymiP5VKuD0QaTmOtjaHAQWkI1eYtCdyOfhcXqaDlcQVAHE6yZsvIixu55Noq
W9bSvpxPhuxmUFat9f6uJCUN4uwJSqf54x6A8yNFNWDgTUeGMoZ3yhXaIBnifP9eS+PRmVxK2qn/
UyjWV10ZiH4VZ2qzmLGjXHJpmdpsEAwC7+Quua6e1uYKIC683pZLkpK+dls19Pn45G+S+2zYr09/
Dp/PUo3lSrclS+76s1ik+g9g5c23gI6ztAAAAABJRU5ErkJggg==
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
jZSrLMiCSIYRgsIZSRgba5Yui6iW7aNF2xYu3NSiRZsgWkuEhP1gONYwSjIVhGkpgZvMfqg0yY/5
vntafB8Fczvb55x73vc9F7wynJNQpCkj1odChfWlbJeb8pkivSjDXJXFtPagpnCQKSrMbPgQevlQ
7ezmET6MOM3L4GT7z4YPFV3djFHkzYL2oGEgszZjykyi/qPnjjzjhEgR0zqpXLZEjQrzb3EepKeT
MY7z4ruV1lctI7KQ2r8p5zGtalWojjEdlFMbkzhfzuFALjAqj0FhQRkAnAMUhbZfDzN5atjQdzkq
TxiQZh8arHa91za3SJC9e9tEKtqdp8oplmcRwHBTwmYzkotYDIMSFGjIrUSpmpUbXJHVPSg0w/Ke
3JqcwQKanhzTlHj9BcExyFP6dnyq4wDN0dTX6q4jTGCVIXeICcrML+sYVphbLewL64goipmP9XSR
8fgidmee5/Sz9G67FhWUmFsZ6qCWODsrTqJIkgrlMtfl1bZk0j1YV3uLVFfaBGim7tFP4/ffeCyX
5POBxJimJ5Ih4kStNlBh6/3kT6igXf+I44nP2/FNnMi/teOouPUPaGfC8E848fIAAAAASUVORK5C
YII=
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
UZZKdj5KUkRCXXVZsMDOwk5RFv4dG1aysJIFSikbOx8rYuPKxscC+eyeM48Frvue3md1Or8zM8/M
GeBPDvP0/JUZPTelAoUdg7nGyT4KQHneO3s5REqK1g8ajdftkAi5HLrLNHouIuecprHDEj2ND00Q
AGlqGAIQsP2YEJEEjfc0GmeQxAwJpmg03jX82ImKFhAQsP+kjKGE3CgUgoM4BoCiN9CMby2/TWoK
FtWL4ahUufjP6lGAgNiDy2ik+ZVmLHdllHSYY2DgcfI316o3hhEYDDshK2u+RDNyKHM8BdICL2sr
v6VVkUV4Mex+ZQ3dnTLQOJ6RVdHjaYFnNf87oBDVn8NE4sWwVq7ymgigAoE7YfA8rkstj2vrFNUE
Y6Tnx3CqYv+R52oCxRY/+TWddnPP4LmexwIDzwcipxs0Gm/Oyavl+riLmtmd2/f3l4uViTw0Yt8x
Qrbw4D8MtwAAAABJRU5ErkJggg==
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#20195;&#30721;&#22359;4-&#21152;&#36733;&#21644;&#24402;&#19968;&#21270;&#22270;&#20687;&#25968;&#25454;">&#20195;&#30721;&#22359;4-&#21152;&#36733;&#21644;&#24402;&#19968;&#21270;&#22270;&#20687;&#25968;&#25454;<a class="anchor-link" href="#&#20195;&#30721;&#22359;4-&#21152;&#36733;&#21644;&#24402;&#19968;&#21270;&#22270;&#20687;&#25968;&#25454;">&#182;</a></h1><p>该代码块主要实现了3个功能：1是将本地硬盘中的每类图像文件夹中的图像数据读到一个3维的dataset对象中，第1维是图像个数索引，其余2维则是图像数据。其中主要是利用了scipy模块中的ndarray对象兑取硬盘中的图像数据。2是将读取到的图像数据按照上文所述的公式进行了归一化。3是将ndarray对象打包为pickle格式并存储在工作目录下，每个类别有一个.pickle文件。并将打包后.pickle文件的地址存储为train_datasets和test_datasets返回。</p>
<p>注：将数据打包为.pickle文件更便于数据的调用与处理。因为，图像的原始数据是使用循环打入到对象中的，如果每次使用图像数据均需要循环来加载，这样加大了代码量。而对.pickle文件只需要读取一次即可，而无需使用循环。</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[4]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">image_size</span> <span class="o">=</span> <span class="mi">28</span>  <span class="c1"># Pixel width and height.</span>
<span class="n">pixel_depth</span> <span class="o">=</span> <span class="mf">255.0</span>  <span class="c1"># Number of levels per pixel.</span>

<span class="k">def</span> <span class="nf">load_letter</span><span class="p">(</span><span class="n">folder</span><span class="p">,</span> <span class="n">min_num_images</span><span class="p">):</span>
  <span class="sd">&quot;&quot;&quot;Load the data for a single letter label.&quot;&quot;&quot;</span>
  <span class="n">image_files</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">folder</span><span class="p">)</span>
  <span class="n">dataset</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">image_files</span><span class="p">),</span> <span class="n">image_size</span><span class="p">,</span> <span class="n">image_size</span><span class="p">),</span>
                         <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
  <span class="nb">print</span><span class="p">(</span><span class="n">folder</span><span class="p">)</span>
  <span class="n">num_images</span> <span class="o">=</span> <span class="mi">0</span>
  <span class="k">for</span> <span class="n">image</span> <span class="ow">in</span> <span class="n">image_files</span><span class="p">:</span>
    <span class="n">image_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">folder</span><span class="p">,</span> <span class="n">image</span><span class="p">)</span>
    <span class="k">try</span><span class="p">:</span>
      <span class="n">image_data</span> <span class="o">=</span> <span class="p">(</span><span class="n">ndimage</span><span class="o">.</span><span class="n">imread</span><span class="p">(</span><span class="n">image_file</span><span class="p">)</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> <span class="o">-</span> 
                    <span class="n">pixel_depth</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span> <span class="o">/</span> <span class="n">pixel_depth</span>
      <span class="k">if</span> <span class="n">image_data</span><span class="o">.</span><span class="n">shape</span> <span class="o">!=</span> <span class="p">(</span><span class="n">image_size</span><span class="p">,</span> <span class="n">image_size</span><span class="p">):</span>
        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Unexpected image shape: </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">image_data</span><span class="o">.</span><span class="n">shape</span><span class="p">))</span>
      <span class="n">dataset</span><span class="p">[</span><span class="n">num_images</span><span class="p">,</span> <span class="p">:,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">image_data</span>
      <span class="n">num_images</span> <span class="o">=</span> <span class="n">num_images</span> <span class="o">+</span> <span class="mi">1</span>
    <span class="k">except</span> <span class="ne">IOError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
      <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Could not read:&#39;</span><span class="p">,</span> <span class="n">image_file</span><span class="p">,</span> <span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="s1">&#39;- it</span><span class="se">\&#39;</span><span class="s1">s ok, skipping.&#39;</span><span class="p">)</span>
    
  <span class="n">dataset</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">num_images</span><span class="p">,</span> <span class="p">:,</span> <span class="p">:]</span>
  <span class="k">if</span> <span class="n">num_images</span> <span class="o">&lt;</span> <span class="n">min_num_images</span><span class="p">:</span>
    <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Many fewer images than expected: </span><span class="si">%d</span><span class="s1"> &lt; </span><span class="si">%d</span><span class="s1">&#39;</span> <span class="o">%</span>
                    <span class="p">(</span><span class="n">num_images</span><span class="p">,</span> <span class="n">min_num_images</span><span class="p">))</span>
    
  <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Full dataset tensor:&#39;</span><span class="p">,</span> <span class="n">dataset</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
  <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Mean:&#39;</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">dataset</span><span class="p">))</span>
  <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Standard deviation:&#39;</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">dataset</span><span class="p">))</span>
  <span class="k">return</span> <span class="n">dataset</span>
        
<span class="k">def</span> <span class="nf">maybe_pickle</span><span class="p">(</span><span class="n">data_folders</span><span class="p">,</span> <span class="n">min_num_images_per_class</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
  <span class="n">dataset_names</span> <span class="o">=</span> <span class="p">[]</span>
  <span class="k">for</span> <span class="n">folder</span> <span class="ow">in</span> <span class="n">data_folders</span><span class="p">:</span>
    <span class="n">set_filename</span> <span class="o">=</span> <span class="n">folder</span> <span class="o">+</span> <span class="s1">&#39;.pickle&#39;</span>
    <span class="n">dataset_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">set_filename</span><span class="p">)</span>
    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">set_filename</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">force</span><span class="p">:</span>
      <span class="c1"># You may override by setting force=True.</span>
      <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> already present - Skipping pickling.&#39;</span> <span class="o">%</span> <span class="n">set_filename</span><span class="p">)</span>
    <span class="k">else</span><span class="p">:</span>
      <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Pickling </span><span class="si">%s</span><span class="s1">.&#39;</span> <span class="o">%</span> <span class="n">set_filename</span><span class="p">)</span>
      <span class="n">dataset</span> <span class="o">=</span> <span class="n">load_letter</span><span class="p">(</span><span class="n">folder</span><span class="p">,</span> <span class="n">min_num_images_per_class</span><span class="p">)</span>
      <span class="k">try</span><span class="p">:</span>
        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">set_filename</span><span class="p">,</span> <span class="s1">&#39;wb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
          <span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">pickle</span><span class="o">.</span><span class="n">HIGHEST_PROTOCOL</span><span class="p">)</span>
      <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Unable to save data to&#39;</span><span class="p">,</span> <span class="n">set_filename</span><span class="p">,</span> <span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
  
  <span class="k">return</span> <span class="n">dataset_names</span>

<span class="n">train_datasets</span> <span class="o">=</span> <span class="n">maybe_pickle</span><span class="p">(</span><span class="n">train_folders</span><span class="p">,</span> <span class="mi">45000</span><span class="p">)</span>
<span class="n">test_datasets</span> <span class="o">=</span> <span class="n">maybe_pickle</span><span class="p">(</span><span class="n">test_folders</span><span class="p">,</span> <span class="mi">1800</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt"></div>

<div class="output_subarea output_stream output_stdout output_text">
<pre>/home/zlong/workspace/udacity/notMNIST/notMNIST_large/A.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_large/B.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_large/C.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_large/D.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_large/E.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_large/F.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_large/G.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_large/H.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_large/I.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_large/J.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_small/A.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_small/B.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_small/C.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_small/D.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_small/E.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_small/F.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_small/G.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_small/H.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_small/I.pickle already present - Skipping pickling.
/home/zlong/workspace/udacity/notMNIST/notMNIST_small/J.pickle already present - Skipping pickling.
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#38382;&#39064;2-&#26174;&#31034;&#20174;pickle&#25991;&#20214;&#20013;&#35835;&#21462;&#30340;&#22270;&#20687;">&#38382;&#39064;2 &#26174;&#31034;&#20174;pickle&#25991;&#20214;&#20013;&#35835;&#21462;&#30340;&#22270;&#20687;<a class="anchor-link" href="#&#38382;&#39064;2-&#26174;&#31034;&#20174;pickle&#25991;&#20214;&#20013;&#35835;&#21462;&#30340;&#22270;&#20687;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[5]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#Problem2 Displaying a sample of the labels and images from the ndarray</span>

<span class="c1"># Config the matplotlib backend as plotting inline in IPython</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="k">def</span> <span class="nf">load_and_displayImage_from_pickle</span><span class="p">(</span><span class="n">data_filename_set</span><span class="p">,</span><span class="n">NumClass</span><span class="p">,</span><span class="n">NumImage</span><span class="p">):</span>
    <span class="k">if</span><span class="p">(</span><span class="n">NumImage</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">):</span>
        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;NumImage &lt;= 0&#39;</span><span class="p">)</span>
        <span class="k">return</span>
    <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="s1">&#39;subplot&#39;</span><span class="p">)</span>
    <span class="k">for</span> <span class="n">index</span><span class="p">,</span><span class="n">pickle_file</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data_filename_set</span><span class="p">):</span>
        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">pickle_file</span><span class="p">,</span><span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
            <span class="n">data</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
            <span class="n">ImageList</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">NumImage</span><span class="p">,:,:]</span>
            <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">Image</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ImageList</span><span class="p">):</span>
                <span class="c1">#NumClass代表类别，每个类别一行;NumImage代表每个类显示的图像张数</span>
                <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">NumClass</span><span class="p">,</span> <span class="n">NumImage</span><span class="p">,</span> <span class="n">index</span><span class="o">*</span><span class="n">NumImage</span><span class="o">+</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
                <span class="n">plt</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">Image</span><span class="p">)</span>
            <span class="n">index</span> <span class="o">=</span> <span class="n">index</span><span class="o">+</span><span class="mi">1</span>        
<span class="c1">#显示10类，每类显示5张图片        </span>
<span class="n">load_and_displayImage_from_pickle</span><span class="p">(</span><span class="n">train_datasets</span><span class="p">,</span><span class="mi">10</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span>    
<span class="n">load_and_displayImage_from_pickle</span><span class="p">(</span><span class="n">test_datasets</span><span class="p">,</span><span class="mi">10</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> 
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
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
Wer/A3L2wD2f3RYAAAAAAElFTkSuQmCC
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#38382;&#39064;3-&#26816;&#27979;&#25968;&#25454;&#26159;&#21542;&#24179;&#34913;">&#38382;&#39064;3-&#26816;&#27979;&#25968;&#25454;&#26159;&#21542;&#24179;&#34913;<a class="anchor-link" href="#&#38382;&#39064;3-&#26816;&#27979;&#25968;&#25454;&#26159;&#21542;&#24179;&#34913;">&#182;</a></h1><p>数据是否平衡的意思是各类样本的大小是否相当。</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[6]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">show_sum_of_different_class</span><span class="p">(</span><span class="n">data_filename_set</span><span class="p">):</span>
    <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
    <span class="c1">#read .pickle file</span>
    <span class="n">sumofdifferentclass</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="k">for</span> <span class="n">pickle_file</span> <span class="ow">in</span> <span class="n">data_filename_set</span><span class="p">:</span>
        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">pickle_file</span><span class="p">,</span><span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
            <span class="n">data</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
            <span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
            <span class="n">sumofdifferentclass</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>

    <span class="c1">#show the data</span>
    <span class="n">x</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
    <span class="n">plt</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">sumofdifferentclass</span><span class="p">)</span>    
    <span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>

<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;train_datasets:</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>    
<span class="n">show_sum_of_different_class</span><span class="p">(</span><span class="n">train_datasets</span><span class="p">)</span>  
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_datasets:</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>    
<span class="n">show_sum_of_different_class</span><span class="p">(</span><span class="n">test_datasets</span><span class="p">)</span> 
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt"></div>

<div class="output_subarea output_stream output_stdout output_text">
<pre>train_datasets:

52909
52911
52912
52911
52912
52912
52912
52912
52912
52911
</pre>
</div>
</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
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
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>

<div class="output_subarea output_stream output_stdout output_text">
<pre>test_datasets:

1872
1873
1873
1873
1873
1872
1872
1872
1872
1872
</pre>
</div>
</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
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
mHOQvgAAAABJRU5ErkJggg==
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#20195;&#30721;&#22359;5-&#23558;&#19981;&#21516;&#31867;&#21035;&#30340;&#25968;&#25454;&#28151;&#21512;&#24182;&#23558;&#24471;&#21040;&#39564;&#35777;&#38598;">&#20195;&#30721;&#22359;5-&#23558;&#19981;&#21516;&#31867;&#21035;&#30340;&#25968;&#25454;&#28151;&#21512;&#24182;&#23558;&#24471;&#21040;&#39564;&#35777;&#38598;<a class="anchor-link" href="#&#20195;&#30721;&#22359;5-&#23558;&#19981;&#21516;&#31867;&#21035;&#30340;&#25968;&#25454;&#28151;&#21512;&#24182;&#23558;&#24471;&#21040;&#39564;&#35777;&#38598;">&#182;</a></h1><p>该模块实现了2个功能：1是将不同类别的数据进行混合。之前是每个类别一个数据对象。现在，为了便于后续的训练，需将不同类别的数据存储为一个大的数据对象，即该对象同时包含A、B…J共个类别的样本。2是从训练集中提取一部分作为验证集。</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[7]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">make_arrays</span><span class="p">(</span><span class="n">nb_rows</span><span class="p">,</span> <span class="n">img_size</span><span class="p">):</span>
  <span class="k">if</span> <span class="n">nb_rows</span><span class="p">:</span>
    <span class="n">dataset</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">((</span><span class="n">nb_rows</span><span class="p">,</span> <span class="n">img_size</span><span class="p">,</span> <span class="n">img_size</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
    <span class="n">labels</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">(</span><span class="n">nb_rows</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">int32</span><span class="p">)</span>
  <span class="k">else</span><span class="p">:</span>
    <span class="n">dataset</span><span class="p">,</span> <span class="n">labels</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
  <span class="k">return</span> <span class="n">dataset</span><span class="p">,</span> <span class="n">labels</span>

<span class="k">def</span> <span class="nf">merge_datasets</span><span class="p">(</span><span class="n">pickle_files</span><span class="p">,</span> <span class="n">train_size</span><span class="p">,</span> <span class="n">valid_size</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
  <span class="n">num_classes</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">pickle_files</span><span class="p">)</span>
  <span class="n">valid_dataset</span><span class="p">,</span> <span class="n">valid_labels</span> <span class="o">=</span> <span class="n">make_arrays</span><span class="p">(</span><span class="n">valid_size</span><span class="p">,</span> <span class="n">image_size</span><span class="p">)</span>
  <span class="n">train_dataset</span><span class="p">,</span> <span class="n">train_labels</span> <span class="o">=</span> <span class="n">make_arrays</span><span class="p">(</span><span class="n">train_size</span><span class="p">,</span> <span class="n">image_size</span><span class="p">)</span>
  <span class="n">vsize_per_class</span> <span class="o">=</span> <span class="n">valid_size</span> <span class="o">//</span> <span class="n">num_classes</span>
  <span class="n">tsize_per_class</span> <span class="o">=</span> <span class="n">train_size</span> <span class="o">//</span> <span class="n">num_classes</span>
    
  <span class="n">start_v</span><span class="p">,</span> <span class="n">start_t</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
  <span class="n">end_v</span><span class="p">,</span> <span class="n">end_t</span> <span class="o">=</span> <span class="n">vsize_per_class</span><span class="p">,</span> <span class="n">tsize_per_class</span>
  <span class="n">end_l</span> <span class="o">=</span> <span class="n">vsize_per_class</span><span class="o">+</span><span class="n">tsize_per_class</span>
  <span class="k">for</span> <span class="n">label</span><span class="p">,</span> <span class="n">pickle_file</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">pickle_files</span><span class="p">):</span>       
    <span class="k">try</span><span class="p">:</span>
      <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">pickle_file</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
        <span class="n">letter_set</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
        <span class="c1"># let&#39;s shuffle the letters to have random validation and training set</span>
        <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">shuffle</span><span class="p">(</span><span class="n">letter_set</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">valid_dataset</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
          <span class="n">valid_letter</span> <span class="o">=</span> <span class="n">letter_set</span><span class="p">[:</span><span class="n">vsize_per_class</span><span class="p">,</span> <span class="p">:,</span> <span class="p">:]</span>
          <span class="n">valid_dataset</span><span class="p">[</span><span class="n">start_v</span><span class="p">:</span><span class="n">end_v</span><span class="p">,</span> <span class="p">:,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">valid_letter</span>
          <span class="n">valid_labels</span><span class="p">[</span><span class="n">start_v</span><span class="p">:</span><span class="n">end_v</span><span class="p">]</span> <span class="o">=</span> <span class="n">label</span>
          <span class="n">start_v</span> <span class="o">+=</span> <span class="n">vsize_per_class</span>
          <span class="n">end_v</span> <span class="o">+=</span> <span class="n">vsize_per_class</span>
                    
        <span class="n">train_letter</span> <span class="o">=</span> <span class="n">letter_set</span><span class="p">[</span><span class="n">vsize_per_class</span><span class="p">:</span><span class="n">end_l</span><span class="p">,</span> <span class="p">:,</span> <span class="p">:]</span>
        <span class="n">train_dataset</span><span class="p">[</span><span class="n">start_t</span><span class="p">:</span><span class="n">end_t</span><span class="p">,</span> <span class="p">:,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">train_letter</span>
        <span class="n">train_labels</span><span class="p">[</span><span class="n">start_t</span><span class="p">:</span><span class="n">end_t</span><span class="p">]</span> <span class="o">=</span> <span class="n">label</span>
        <span class="n">start_t</span> <span class="o">+=</span> <span class="n">tsize_per_class</span>
        <span class="n">end_t</span> <span class="o">+=</span> <span class="n">tsize_per_class</span>
    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
      <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Unable to process data from&#39;</span><span class="p">,</span> <span class="n">pickle_file</span><span class="p">,</span> <span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
      <span class="k">raise</span>
    
  <span class="k">return</span> <span class="n">valid_dataset</span><span class="p">,</span> <span class="n">valid_labels</span><span class="p">,</span> <span class="n">train_dataset</span><span class="p">,</span> <span class="n">train_labels</span>
            
            
<span class="n">train_size</span> <span class="o">=</span> <span class="mi">200000</span>
<span class="n">valid_size</span> <span class="o">=</span> <span class="mi">10000</span>
<span class="n">test_size</span> <span class="o">=</span> <span class="mi">10000</span>

<span class="n">valid_dataset</span><span class="p">,</span> <span class="n">valid_labels</span><span class="p">,</span> <span class="n">train_dataset</span><span class="p">,</span> <span class="n">train_labels</span> <span class="o">=</span> <span class="n">merge_datasets</span><span class="p">(</span>
  <span class="n">train_datasets</span><span class="p">,</span> <span class="n">train_size</span><span class="p">,</span> <span class="n">valid_size</span><span class="p">)</span>
<span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">test_dataset</span><span class="p">,</span> <span class="n">test_labels</span> <span class="o">=</span> <span class="n">merge_datasets</span><span class="p">(</span><span class="n">test_datasets</span><span class="p">,</span> <span class="n">test_size</span><span class="p">)</span>

<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Training:&#39;</span><span class="p">,</span> <span class="n">train_dataset</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">train_labels</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Validation:&#39;</span><span class="p">,</span> <span class="n">valid_dataset</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">valid_labels</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Testing:&#39;</span><span class="p">,</span> <span class="n">test_dataset</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">test_labels</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt"></div>

<div class="output_subarea output_stream output_stdout output_text">
<pre>Training: (200000, 28, 28) (200000,)
Validation: (10000, 28, 28) (10000,)
Testing: (10000, 28, 28) (10000,)
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#20195;&#30721;&#22359;6-&#23558;&#28151;&#21512;&#21518;&#30340;&#25968;&#25454;&#36827;&#34892;&#38543;&#26426;&#21270;">&#20195;&#30721;&#22359;6-&#23558;&#28151;&#21512;&#21518;&#30340;&#25968;&#25454;&#36827;&#34892;&#38543;&#26426;&#21270;<a class="anchor-link" href="#&#20195;&#30721;&#22359;6-&#23558;&#28151;&#21512;&#21518;&#30340;&#25968;&#25454;&#36827;&#34892;&#38543;&#26426;&#21270;">&#182;</a></h1><p>上一步只是将数据进行和混合并存储为一个大的数据对象，此步则将混合后的数据对象中的数据进行了随机化处理。只有随机化后的数据训练模型时才会有较为稳定的效果。</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[8]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">randomize</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">labels</span><span class="p">):</span>
  <span class="n">permutation</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">permutation</span><span class="p">(</span><span class="n">labels</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
  <span class="n">shuffled_dataset</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="n">permutation</span><span class="p">,:,:]</span>
  <span class="n">shuffled_labels</span> <span class="o">=</span> <span class="n">labels</span><span class="p">[</span><span class="n">permutation</span><span class="p">]</span>
  <span class="k">return</span> <span class="n">shuffled_dataset</span><span class="p">,</span> <span class="n">shuffled_labels</span>
<span class="n">train_dataset</span><span class="p">,</span> <span class="n">train_labels</span> <span class="o">=</span> <span class="n">randomize</span><span class="p">(</span><span class="n">train_dataset</span><span class="p">,</span> <span class="n">train_labels</span><span class="p">)</span>
<span class="n">test_dataset</span><span class="p">,</span> <span class="n">test_labels</span> <span class="o">=</span> <span class="n">randomize</span><span class="p">(</span><span class="n">test_dataset</span><span class="p">,</span> <span class="n">test_labels</span><span class="p">)</span>
<span class="n">valid_dataset</span><span class="p">,</span> <span class="n">valid_labels</span> <span class="o">=</span> <span class="n">randomize</span><span class="p">(</span><span class="n">valid_dataset</span><span class="p">,</span> <span class="n">valid_labels</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#38382;&#39064;4-&#20174;&#39564;&#35777;&#28151;&#21512;&#21518;&#30340;&#25968;&#25454;">&#38382;&#39064;4 &#20174;&#39564;&#35777;&#28151;&#21512;&#21518;&#30340;&#25968;&#25454;<a class="anchor-link" href="#&#38382;&#39064;4-&#20174;&#39564;&#35777;&#28151;&#21512;&#21518;&#30340;&#25968;&#25454;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[9]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&#39;&#39;&#39;Problem4 Convince yourself that the data is still good after shuffling!</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="c1">#data_set是数据集，NumImage是显示的图像张数</span>
<span class="k">def</span> <span class="nf">displayImage_from_dataset</span><span class="p">(</span><span class="n">data_set</span><span class="p">,</span><span class="n">NumImage</span><span class="p">):</span>
    <span class="k">if</span><span class="p">(</span><span class="n">NumImage</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">):</span>
        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;NumImage &lt;= 0&#39;</span><span class="p">)</span>
        <span class="k">return</span>
    <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="s1">&#39;subplot&#39;</span><span class="p">)</span>
    <span class="n">ImageList</span> <span class="o">=</span> <span class="n">data_set</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">NumImage</span><span class="p">,:,:]</span>
    <span class="k">for</span> <span class="n">index</span><span class="p">,</span><span class="n">Image</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ImageList</span><span class="p">):</span>
        <span class="c1">#NumClass代表类别，每个类别一行;NumImage代表每个类显示的图像张数</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">NumImage</span><span class="o">//</span><span class="mi">5</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">Image</span><span class="p">)</span>
        <span class="n">index</span> <span class="o">=</span> <span class="n">index</span><span class="o">+</span><span class="mi">1</span>    
    <span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="n">displayImage_from_dataset</span><span class="p">(</span><span class="n">train_dataset</span><span class="p">,</span><span class="mi">50</span><span class="p">)</span>  
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
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
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#20195;&#30721;&#22359;7-&#23558;&#19981;&#21516;&#30340;&#26679;&#26412;&#21450;&#23384;&#20026;.pickle&#25991;&#20214;">&#20195;&#30721;&#22359;7-&#23558;&#19981;&#21516;&#30340;&#26679;&#26412;&#21450;&#23384;&#20026;.pickle&#25991;&#20214;<a class="anchor-link" href="#&#20195;&#30721;&#22359;7-&#23558;&#19981;&#21516;&#30340;&#26679;&#26412;&#21450;&#23384;&#20026;.pickle&#25991;&#20214;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[10]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data_root</span> <span class="o">=</span> <span class="s1">&#39;.&#39;</span> <span class="c1"># Change me to store data elsewhere</span>

<span class="nb">print</span><span class="p">(</span><span class="n">data_root</span><span class="p">)</span>
<span class="n">pickle_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">data_root</span><span class="p">,</span> <span class="s1">&#39;notMNIST.pickle&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">pickle_file</span><span class="p">)</span>

<span class="k">try</span><span class="p">:</span>
  <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">pickle_file</span><span class="p">,</span> <span class="s1">&#39;wb&#39;</span><span class="p">)</span>
  <span class="n">save</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s1">&#39;train_dataset&#39;</span><span class="p">:</span> <span class="n">train_dataset</span><span class="p">,</span>
    <span class="s1">&#39;train_labels&#39;</span><span class="p">:</span> <span class="n">train_labels</span><span class="p">,</span>
    <span class="s1">&#39;valid_dataset&#39;</span><span class="p">:</span> <span class="n">valid_dataset</span><span class="p">,</span>
    <span class="s1">&#39;valid_labels&#39;</span><span class="p">:</span> <span class="n">valid_labels</span><span class="p">,</span>
    <span class="s1">&#39;test_dataset&#39;</span><span class="p">:</span> <span class="n">test_dataset</span><span class="p">,</span>
    <span class="s1">&#39;test_labels&#39;</span><span class="p">:</span> <span class="n">test_labels</span><span class="p">,</span>
    <span class="p">}</span>
  <span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">save</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">pickle</span><span class="o">.</span><span class="n">HIGHEST_PROTOCOL</span><span class="p">)</span>
  <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
  <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Unable to save data to&#39;</span><span class="p">,</span> <span class="n">pickle_file</span><span class="p">,</span> <span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
  <span class="k">raise</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt"></div>

<div class="output_subarea output_stream output_stdout output_text">
<pre>.
./notMNIST.pickle
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#38382;&#39064;5-&#25968;&#25454;&#28165;&#27927;">&#38382;&#39064;5-&#25968;&#25454;&#28165;&#27927;<a class="anchor-link" href="#&#38382;&#39064;5-&#25968;&#25454;&#28165;&#27927;">&#182;</a></h1><p>一般来说，训练集、验证集和测试集中会有数据的重合，但是，如果重合的数据太多则会影响到测试结果的准确程度。因此，需要对数据进行清洗，使彼此之间步存在交集。</p>
<p>注：ndarray数据无法使用set的方式来求取交集。但如果使用循环对比的方式在数据量大的情况下会非常慢，因此，下文的做法使先将数据哈希化，再通过哈希的键值来判断数据是否相等。由于哈希的键值是字符串，因此比对起来效率会高很多。</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[11]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#先使用hash</span>
<span class="kn">import</span> <span class="nn">hashlib</span>

<span class="c1">#使用sha的作用是将二维数据和哈希值之间进行一一对应，这样，通过比较哈希值就能将二维数组是否相等比较出来</span>
<span class="k">def</span> <span class="nf">extract_overlap_hash_where</span><span class="p">(</span><span class="n">dataset_1</span><span class="p">,</span><span class="n">dataset_2</span><span class="p">):</span>

    <span class="n">dataset_hash_1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">img</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span> <span class="k">for</span> <span class="n">img</span> <span class="ow">in</span> <span class="n">dataset_1</span><span class="p">])</span>
    <span class="n">dataset_hash_2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">img</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span> <span class="k">for</span> <span class="n">img</span> <span class="ow">in</span> <span class="n">dataset_2</span><span class="p">])</span>
    <span class="n">overlap</span> <span class="o">=</span> <span class="p">{}</span>
    <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">hash1</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">dataset_hash_1</span><span class="p">):</span>
        <span class="n">duplicates</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">dataset_hash_2</span> <span class="o">==</span> <span class="n">hash1</span><span class="p">)</span>
        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">duplicates</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
            <span class="n">overlap</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">duplicates</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
    <span class="k">return</span> <span class="n">overlap</span>

<span class="c1">#display the overlap</span>
<span class="k">def</span> <span class="nf">display_overlap</span><span class="p">(</span><span class="n">overlap</span><span class="p">,</span><span class="n">source_dataset</span><span class="p">,</span><span class="n">target_dataset</span><span class="p">):</span>
    <span class="n">overlap</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">overlap</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">3</span><span class="p">}</span>
    <span class="n">item</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">overlap</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
    <span class="n">imgs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">(([</span><span class="n">source_dataset</span><span class="p">[</span><span class="n">item</span><span class="p">]],</span><span class="n">target_dataset</span><span class="p">[</span><span class="n">overlap</span><span class="p">[</span><span class="n">item</span><span class="p">][</span><span class="mi">0</span><span class="p">:</span><span class="mi">7</span><span class="p">]]))</span>
    <span class="n">plt</span><span class="o">.</span><span class="n">suptitle</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
    <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">img</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">imgs</span><span class="p">):</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;off&#39;</span><span class="p">)</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">img</span><span class="p">)</span>
    <span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>

<span class="c1">#数据清洗</span>
<span class="k">def</span> <span class="nf">sanitize</span><span class="p">(</span><span class="n">dataset_1</span><span class="p">,</span><span class="n">dataset_2</span><span class="p">,</span><span class="n">labels_1</span><span class="p">):</span>
    <span class="n">dataset_hash_1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">img</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span> <span class="k">for</span> <span class="n">img</span> <span class="ow">in</span> <span class="n">dataset_1</span><span class="p">])</span>
    <span class="n">dataset_hash_2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">img</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span> <span class="k">for</span> <span class="n">img</span> <span class="ow">in</span> <span class="n">dataset_2</span><span class="p">])</span>
    <span class="n">overlap</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">hash1</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">dataset_hash_1</span><span class="p">):</span>
        <span class="n">duplictes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">dataset_hash_2</span> <span class="o">==</span> <span class="n">hash1</span><span class="p">)</span>
        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">duplictes</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
            <span class="n">overlap</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">dataset_1</span><span class="p">,</span><span class="n">overlap</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span><span class="n">np</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">labels_1</span><span class="p">,</span> <span class="n">overlap</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>


<span class="n">overlap_test_train</span> <span class="o">=</span> <span class="n">extract_overlap_hash_where</span><span class="p">(</span><span class="n">test_dataset</span><span class="p">,</span><span class="n">train_dataset</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Number of overlaps:&#39;</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">overlap_test_train</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
<span class="n">display_overlap</span><span class="p">(</span><span class="n">overlap_test_train</span><span class="p">,</span> <span class="n">test_dataset</span><span class="p">,</span> <span class="n">train_dataset</span><span class="p">)</span>

<span class="n">test_dataset_sanit</span><span class="p">,</span><span class="n">test_labels_sanit</span> <span class="o">=</span> <span class="n">sanitize</span><span class="p">(</span><span class="n">test_dataset</span><span class="p">,</span><span class="n">train_dataset</span><span class="p">,</span><span class="n">test_labels</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Overlapping images removed from test_dataset: &#39;</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">test_dataset</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">test_dataset_sanit</span><span class="p">))</span>

<span class="n">valid_dataset_sanit</span><span class="p">,</span> <span class="n">valid_labels_sanit</span> <span class="o">=</span> <span class="n">sanitize</span><span class="p">(</span><span class="n">valid_dataset</span><span class="p">,</span> <span class="n">train_dataset</span><span class="p">,</span> <span class="n">valid_labels</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Overlapping images removed from valid_dataset: &#39;</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">valid_dataset</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">valid_dataset_sanit</span><span class="p">))</span>

<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Training:&#39;</span><span class="p">,</span> <span class="n">train_dataset</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">train_labels</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Validation:&#39;</span><span class="p">,</span> <span class="n">valid_labels_sanit</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">valid_labels_sanit</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Testing:&#39;</span><span class="p">,</span> <span class="n">test_dataset_sanit</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">test_labels_sanit</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>

<span class="n">pickle_file_sanit</span> <span class="o">=</span> <span class="s1">&#39;notMNIST_sanit.pickle&#39;</span>
<span class="k">try</span><span class="p">:</span>
    <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">pickle_file_sanit</span><span class="p">,</span><span class="s1">&#39;wb&#39;</span><span class="p">)</span>
    <span class="n">save</span> <span class="o">=</span> <span class="p">{</span>
        <span class="s1">&#39;train_dataset&#39;</span><span class="p">:</span><span class="n">train_dataset</span><span class="p">,</span>
        <span class="s1">&#39;train_labels&#39;</span><span class="p">:</span> <span class="n">train_labels</span><span class="p">,</span>
        <span class="s1">&#39;valid_dataset&#39;</span><span class="p">:</span> <span class="n">valid_dataset</span><span class="p">,</span>
        <span class="s1">&#39;valid_labels&#39;</span><span class="p">:</span> <span class="n">valid_labels</span><span class="p">,</span>
        <span class="s1">&#39;test_dataset&#39;</span><span class="p">:</span> <span class="n">test_dataset</span><span class="p">,</span>
        <span class="s1">&#39;test_labels&#39;</span><span class="p">:</span> <span class="n">test_labels</span><span class="p">,</span>
    <span class="p">}</span>
    <span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">save</span><span class="p">,</span><span class="n">f</span><span class="p">,</span><span class="n">pickle</span><span class="o">.</span><span class="n">HIGHEST_PROTOCOL</span><span class="p">)</span>
    <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
  <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Unable to save data to&#39;</span><span class="p">,</span> <span class="n">pickle_file</span><span class="p">,</span> <span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
  <span class="k">raise</span>

<span class="n">statinfo</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">pickle_file_sanit</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Compressed pickle size:&#39;</span><span class="p">,</span> <span class="n">statinfo</span><span class="o">.</span><span class="n">st_size</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt"></div>

<div class="output_subarea output_stream output_stdout output_text">
<pre>Number of overlaps: 1284
</pre>
</div>
</div>

<div class="output_area">
<div class="prompt"></div>



<div class="output_png output_subarea ">
<img src="
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
"
>
</div>

</div>

<div class="output_area">
<div class="prompt"></div>

<div class="output_subarea output_stream output_stdout output_text">
<pre>Overlapping images removed from test_dataset:  1284
Overlapping images removed from valid_dataset:  1069
Training: (200000, 28, 28) (200000,)
Validation: (8931,) (8931,)
Testing: (8716, 28, 28) (8716,)
Compressed pickle size: 690800506
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#38382;&#39064;6-&#27169;&#22411;&#35757;&#32451;">&#38382;&#39064;6-&#27169;&#22411;&#35757;&#32451;<a class="anchor-link" href="#&#38382;&#39064;6-&#27169;&#22411;&#35757;&#32451;">&#182;</a></h1><p>该模型是使用逻辑回归模型进行的训练。</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[12]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">train_and_predict</span><span class="p">(</span><span class="n">sample_size</span><span class="p">):</span>
    <span class="n">regr</span> <span class="o">=</span> <span class="n">LogisticRegression</span><span class="p">()</span>
    <span class="n">X_train</span> <span class="o">=</span> <span class="n">train_dataset</span><span class="p">[:</span><span class="n">sample_size</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">sample_size</span><span class="p">,</span><span class="mi">784</span><span class="p">)</span>
    <span class="n">y_train</span> <span class="o">=</span> <span class="n">train_labels</span><span class="p">[:</span><span class="n">sample_size</span><span class="p">]</span>
    <span class="n">regr</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">X_train</span><span class="p">,</span><span class="n">y_train</span><span class="p">)</span>
    <span class="n">X_test</span> <span class="o">=</span> <span class="n">test_dataset</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">test_dataset</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="mi">28</span><span class="o">*</span><span class="mi">28</span><span class="p">)</span>
    <span class="n">y_test</span> <span class="o">=</span> <span class="n">test_labels</span>

    <span class="n">pred_labels</span> <span class="o">=</span> <span class="n">regr</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">X_test</span><span class="p">)</span>
    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Accuracy:&#39;</span><span class="p">,</span> <span class="n">regr</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">X_test</span><span class="p">,</span> <span class="n">y_test</span><span class="p">),</span> <span class="s1">&#39;when sample_size=&#39;</span><span class="p">,</span> <span class="n">sample_size</span><span class="p">)</span>

<span class="k">for</span> <span class="n">sample_size</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">50</span><span class="p">,</span><span class="mi">100</span><span class="p">,</span><span class="mi">1000</span><span class="p">,</span><span class="mi">5000</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">train_dataset</span><span class="p">)]:</span>
    <span class="n">train_and_predict</span><span class="p">(</span><span class="n">sample_size</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">
<div class="prompt"></div>

<div class="output_subarea output_stream output_stdout output_text">
<pre>Accuracy: 0.6392 when sample_size= 50
Accuracy: 0.7437 when sample_size= 100
Accuracy: 0.8353 when sample_size= 1000
Accuracy: 0.8497 when sample_size= 5000
Accuracy: 0.8898 when sample_size= 200000
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Success!&quot;</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
    </div>
  </div>
</body>

 


</html>
